可以通过 shell 命令过滤文本的图形文本编辑器?

可以通过 shell 命令过滤文本的图形文本编辑器?

我以前使用 NEdit 作为图形文本编辑器,但最近由于缺乏维护,它不再正常工作。所以我正在寻找替代品。是否有任何图形文本编辑器可以将选定的文本直接发送到未事先定义的 shell 命令?

在 NEdit 中,您选择一块文本,告诉它通过 shell 进行过滤,然后出现一个窗口,您可以在其中输入 shell 命令(例如awk '{print $1}'),并立即在编辑器中返回该命令的输出。

还有什么工具可以实现相同的功能?

答案1

使用 gVim,选择文本、类型:!和所需的命令。所选行将被命令的输出替换。

一个例子:

编辑/etc/apt/sources.list在此处输入图片描述

选择文本并按下:!'<,'>命令行中的)命令awk '{print $3}'在此处输入图片描述

文本被替换为输出: 在此处输入图片描述

当然,Vim 的正则表达式功能足够强大,我不会使用外部程序(尤其是sed,可能不会awk)。使用这些命令时需要小心 -%带有各种后缀的命令用于添加有关文件的信息(:!echo %例如,打印文件的路径),因此您必须转义这些命令。

请注意,:!没有范围(或选择)的命令不会替换任何行。对于选定的文本,'<,'>:在您输入进入命令行时会自动添加。

答案2

使用编辑:

先决条件:

  1. xclip,从终端安装为sudo apt-get install xclip
  2. Gedit 插件外部工具。这个插件的目标是允许用户从 gedit 界面执行外部命令。

要安装插件,请打开 gedit,转到编辑 -> 首选项 -> 插件 -> 外部工具。

在此处输入图片描述

设置:

要配置插件,请转到工具->管理外部工具...

将出现一个对话框。

  1. 使用添加按钮添加新工具+并为其命名运行选择
  2. 分配快捷键,这里我使用了Alt+J
  3. 改变编辑节省输入输出适用性如以下截图所示。

在此处输入图片描述

如何运行

  1. gedit首先选择您想要在终端中运行的一些文本。
  2. 通过按键盘上的Alt+或导航至工具 -> 外部工具来运行刚刚设置的外部工具“RunSelection”J

怎么运行的

  1. 当您在中选择一些文本时gedit,它会出现在 X 选择(剪贴板)中。
  2. xclip -o使选择可用于标准输出并将值存储在变量中。(mcmd在上述情况下)
  3. 最后命令被传递给gnome-terminal

答案3

总结NEdit (Nirvana 编辑器)

版本:

  • 原始版本:N编辑,从源代码构建/安装或搜索包管理器(例如apt install nedit)。此版本不支持 Unicode
  • XN編輯:目前已管理,为 NEdit 添加了一些有用的功能,如 unicode 支持(我正在使用这个,它运行良好)。从源代码构建安装。
  • 编辑:Nedit 的 Qt5 端口,具有一些额外的功能。

提供 shell-filters 集成的编辑器

尽管这个问题已经很老了,但我还是时不时地会来这里,因为我对以前使用的文本编辑器不满意。我尝试了很多,我觉得我可以补充当前的答案。以下是我尝试过的编辑器列表,它们支持 shell 过滤器(以某种方式)。这个列表并不详尽,我可能会在以后编辑它以添加更多软件。

在控制台中运行

  • Gnu 的纳米:很可能已经安装在您的系统中(或尝试通过包管理器)。Nano 对运行 shell 命令有很好的支持:Ctrl+T,您会得到一个提示,您可以在其中编写要执行的 shell 命令;您可以选择将当前选定的文本通过管道传输到命令(在命令前加上管道运算符|)。命令的输出会自动插入(附加到文件或过滤选择)。可能不太为人所知的是,nano 允许用户定义的键绑定,这使得使用它非常方便(您基本上可以向其中添加代码片段功能;我做到了)。man nano并且man nanorc是您需要知道的一切。
  • Vi(或兼容模式下的 vim):大多数 vi 克隆都能够运行 shell 过滤器和/或 shell 命令来修改当前文本;在正常模式下,按下:并输入命令提示符。在这里,您可以键入“ed”命令(强大的语法,类似于“sed”命令)或在命令前加上!(或其他符号/语法)来读取 shell 命令的输出。与 shell 的集成通常非常好且简单明了,但是根据您使用的特定 vi 克隆,可能会提供更多或更少的功能(例如,可能无法搜索以前的命令历史记录)。
  • Vim或者尼维姆:与 vi 类似,具有您所期望的所有功能(例如命令历史记录)。
  • :我从未尝试过微型,但它也应该具有运行 shell 过滤器/命令的能力。

GUI 程序

  • 吉尼:这是一款出色的文本编辑器。它与终端集成良好,运行嵌入式 VTE,您可以在其中与终端交互。它支持通过代码片段运行和读取 shell 命令输出(允许定义执行自定义 shell 命令的代码片段),并通过“mini-script”插件支持对选定文本或整个文档/会话进行 shell 过滤。但是,后者使用起来有点不方便,因此如果您打算严重依赖 shell 过滤器和命令,那么另一个编辑器可能更适合您。

  • JetBrain IDE:在现代功能齐全的 IDE 中,JetBrains 通过插件支持 shell 过滤器。我发现摩根·施韦尔斯的“壳牌工艺”提供最佳体验。在我看来,它比 Geany 的效果要好一点,但如果您需要使用大量 shell 过滤器,它仍然不够好。

  • 编辑通过“外部工具”功能支持 shell 过滤器/命令。它工作正常,但不幸的是设置起来很麻烦:基本上,您需要定义编写一个包装器脚本(在 Gedit 中),该脚本调用您之前定义的任何过滤器/脚本/命令。在我看来,这太烦人了。您可能希望在那些罕见的情况下使用它,因为如果不使用自定义脚本/过滤器,就没有其他方便的选项来实现您想要的编辑。

  • 凯特:我知道 Kate 还通过插件提供与 shell 过滤器的集成。但是,我从未尝试过,所以对此无话可说。

  • XN編輯:其中,XNEdit 对 shell 过滤器和命令的支持最为强大。它具有预定义的快捷方式,可通过弹出对话框中插入的命令/过滤器执行 shell 命令或过滤文本;它可以在正在编辑的文件中写入 shell 命令,并在按键时执行该命令(读取其输出)。您可以轻松编辑编辑器的菜单条目(由编辑器的 GUI 引导)以定义新的菜单条目,使用用户定义的快捷方式和/或鼠标右键单击菜单执行任意 shell 命令/过滤器。这些条目可以分组到子菜单中(以获得更有条理的 UI),并根据正在编辑的文件的文件类型是否可用。编辑器功能通过 shell 集成得到极大扩展,使其功能极其强大;此外,它非常容易设置。它还具有一种宏语言,其中包含一些有据可查的命令,可以与任意用户定义的脚本结合使用,以实现几乎所有功能。它还有一个好的(相当简短的)文档以及其他极其方便的集成(如 xnc 命令和独特的鼠标编辑功能)。

个人推荐及意见

当我发现 shell 过滤器时,我非常努力地将它们集成到我的日常工作流程中:它们非常方便,并且为用户提供了比其他软件使用复杂且晦涩的插件所能实现的更多的编辑能力。此外,shell 过滤器可以在任何地方以标准、可预测的方式工作;如果您更换软件,则无需迁移整个脚本。

在使用 XNEdit 之前,我很难将过滤器集成到 GUI 中,因为我从未找到过轻松的工作流程。因此,我绝对会推荐使用 XNEdit 来广泛使用过滤器/命令。这是一款出色的软件,在处理大型项目时也可以使用。我个人用它代替了 IDE,现在我觉得自己不会再使用它们了。

我还建议将它与控制台编辑器配对,因为这通常需要快速编辑文件(特别是如果您经常使用终端和过滤器)。为此,我选择 Nano。唯一其他合理的替代方案是 vim(不是 vi),但它过于复杂、非标准,您最终将使用插件(而不是 shell)来完成所有工作,重新发明轮子(注意 POV:我使用 vim 作为我唯一的编辑器已有 5 年了,我被它迷住了;但我改变了主意,让它变得更好)。

Vi 克隆要么有缺陷,要么缺少有用的功能(例如语法高亮、命令历史记录),或者两者兼而有之。到目前为止,我尝试过的最好的是Keith Bostic 的 nvi尼特维kyx0r 的 Nextvi

在我看来,Nano 是 vi 的简单性和 vim 的复杂性之间的完美折衷。一旦你学会了如何使用命令行 (Ctrl+T) 和管道,它就变得非常强大(虽然不如 XNEdit 那么方便)。为了了解你能做什么,我能够添加重新编译功能(用于交互式 Python 和 R 开发)结合了 nano 快捷方式的绑定和自定义 shell 脚本(没有什么特别的)以及代码片段功能(尽管它可能不值得)。值得一读(这是man nanoman nanorc唯一需要的文档;另外,几个小时后您就会掌握它)并添加一些自定义快捷方式(例如全选、从剪贴板复制粘贴)。

相关内容