我正在切换到 Linux,并且曾经使用过 NoteTab Pro,它允许我进行脚本化搜索和替换...因为我需要多个替换序列来实现特定结果。我想将这些序列放入文件或宏中,以多次应用它,同时改进脚本,或将其应用到多个文件。
VIM 支持这个吗?
为什么不尝试呢?嗯,我在安装东西之前会先研究一下。 :)
答案1
几乎没有比 Vim 更适合编写脚本的编辑器了,所以答案是响亮的是的。
有几种可能的方法:
- 正如 @Angelo 已经回答的那样,您可以简单地将 Vim 命令(准确地说是 Ex 命令;即您在 Vim 中键入
:
并结束的任何内容<Enter>
)放入scriptname.vim
文件中,然后:source path/to/scriptname.vim
加载并执行它们。这里的好处是,您可以保持脚本打开,进行编辑并保留,然后可以立即重新运行它。另一方面,调用并不短且不美观,而且扩展性也不好。 (你可以:source
从一个脚本中得到另一个脚本,但这真的很难看。) - 作为替代方案,您可以跳过外部文件并将命令放入寄存器中(
:help quote_alpha
)。您可以将寄存器粘贴到临时缓冲区中,进行编辑,然后猛拉(复制)回寄存器,并执行:@
。命名寄存器通常会在会话之间自动保留,但您也可以将它们放入您的.vimrc
(见下文)中以防止宏被覆盖。 - 最常见的方法是进行新的自定义映射或者命令。映射通过短击键调用,并与 Vim 的模式编辑保持一致(因此相同的键可以根据模式执行不同的操作);这些用于经常做的事情。命令是 Ex 命令,因此输入时间较长,但您可以在 Vim 的命令行上完成。看
:help usr_40.txt
有关如何编写映射和命令的详细说明。您通常将它们放入中央配置文件中,~/.vimrc
,然后它们在启动 Vim 后立即可用。与以前的方法相比,映射和命令无缝地融入 Vim 并且可以轻松调用,因此这些非常适合您将来一次又一次需要的东西。缺点是编辑和重新加载比较复杂(重新启动 Vim 需要时间,重新加载到当前会话要费一些力气)。 - 如果您的扩展通常有用,您可以将它们变成插件(
: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