VIM:脚本化搜索和替换?

VIM:脚本化搜索和替换?

我正在切换到 Linux,并且曾经使用过 NoteTab Pro,它允许我进行脚本化搜索和替换...因为我需要多个替换序列来实现特定结果。我想将这些序列放入文件或宏中,以多次应用它,同时改进脚本,或将其应用到多个文件。

VIM 支持这个吗?

为什么不尝试呢?嗯,我在安装东西之前会先研究一下。 :)

答案1

几乎没有比 Vim 更适合编写脚本的编辑器了,所以答案是响亮的是的

有几种可能的方法:

  1. 正如 @Angelo 已经回答的那样,您可以简单地将 Vim 命令(准确地说是 Ex 命令;即您在 Vim 中键入:并结束的任何内容<Enter>)放入scriptname.vim文件中,然后:source path/to/scriptname.vim加载并执行它们。这里的好处是,您可以保持脚本打开,进行编辑并保留,然后可以立即重新运行它。另一方面,调用并不短且不美观,而且扩展性也不好。 (你可以:source从一个脚本中得到另一个脚本,但这真的很难看。)
  2. 作为替代方案,您可以跳过外部文件并将命令放入寄存器中(:help quote_alpha)。您可以将寄存器粘贴到临时缓冲区中,进行编辑,然后猛拉(复制)回寄存器,并执行:@。命名寄存器通常会在会话之间自动保留,但您也可以将它们放入您的.vimrc(见下文)中以防止宏被覆盖。
  3. 最常见的方法是进行新的自定义映射或者命令映射通过短击键调用,并与 Vim 的模式编辑保持一致(因此相同的键可以根据模式执行不同的操作);这些用于经常做的事情。命令是 Ex 命令,因此输入时间较长,但您可以在 Vim 的命令行上完成。看:help usr_40.txt有关如何编写映射和命令的详细说明。您通常将它们放入中央配置文件中,~/.vimrc,然后它们在启动 Vim 后立即可用。与以前的方法相比,映射和命令无缝地融入 Vim 并且可以轻松调用,因此这些非常适合您将来一次又一次需要的东西。缺点是编辑和重新加载比较复杂(重新启动 Vim 需要时间,重新加载到当前会话要费一些力气)。
  4. 如果您的扩展通常有用,您可以将它们变成插件(:help write-plugin),然后可以轻松地在 Vim 安装之间共享、发布(在 GitHub 或vim.org)。有大量可用的插件;因此,在重新发明轮子之前先进行搜索!

答案2

当然,您可以通过外部文件执行任何 vim 命令,包括搜索和替换,并使用以下命令加载它们

:source ~/path/to/file

文档:

                                        *:so* *:source* *load-vim-script*
:so[urce] {file}        Read Ex commands from {file}.  These are commands that
                        start with a ":".
                        Triggers the |SourcePre| autocommand.

答案3

您还可以构建 vim 脚本以在外部使用 vim。

例子:

$ cat trim-spaces

#!/usr/bin/vim -s
:%s/[ \t\r]*$//
:%s/[ \t\r\n]*\%$/\n/
G
:r ! echo "\#last changed by $USER in :" `date`
:x
  • line2:删除行尾的空格
  • line3:删除文件末尾的空行
  • line4,5:添加“最后更改”行

接下来,我们可以

$ trim-spaces file1

为了清理file1

相关内容