vim:执行编辑器命令列表

时间:2009-12-02 05:45:23

标签: vim editor

vim中有没有办法给出编辑器命令列表?我想执行一系列“全局”命令,命令有一些模式。所以我最好生成命令列表(使用正则表达式搜索和替换),然后运行它们,而不必输入每个命令。

谢谢! 拉夫

4 个答案:

答案 0 :(得分:8)

(更新:s / buffer / register / g)

如果您可以将要运行的所有命令放入寄存器,那么执行寄存器?

http://www.bo.infn.it/alice/alice-doc/mll-doc/linux/vi-ex/node24.html

例如,如果您有一个类似的文件:

abc
def
ghi
dd
dd

然后做

:g/dd/y A

这会用dd猛拉所有行并附加到注册表

然后,如果您在文件的第一行,并键入:

@a

然后将删除2行,文件应如下所示:

ghi
dd
dd

答案 1 :(得分:1)

对我来说听起来像一个宏。谷歌vim宏提供了大量有用的信息。基本上

  1. 在命令模式下,键入q后跟一些其他字母,这些字母将是我们存储宏的寄存器。例如'qw'。
  2. 运行要存储的命令以备将来使用。这可以是包括正则表达式替换,移动,插入,删除等在内的任何内容。
  3. 当你完成再次击中q时。您现在已存储了您的操作以供将来使用。要重新运行您刚刚输入的内容,请键入@w(或您用于寄存器的任何字母以保存宏)。
  4. 宏中有很多功能。有时您希望在会话之间保存宏。当我想这样做时,您可以通过粘贴刚刚保存的寄存器将宏粘贴到缓冲区中。例如,如果你保存宏来注册w,输入“wp to paste register w(注意这是双引号,而不是两个单引号)。当你按下escape或enter时,你会看到一些有趣的字符。还有更多写这些的可读方式和,但是^ [和^ M也会起作用。

    你现在可以将这些行放入一个寄存器(我看到有人刚刚发布了一个答案,但与我的方式有所不同)通过在可视模式下选择文本,然后输入“wy。这会拉动所选文本到寄存器w。现在将寄存器作为宏运行,按以前键入@w。

    如果您经常使用它,则可能值得将宏映射到.vimrc中的快捷命令。例如,这里有一些我在vimrc中的地图,可以帮助我轻松打开并保存我的.vimrc

    " For modifying the .vimrc
    nmap ,e :e $HOME/.vimrc<cr>
    nmap ,s :write!<cr>:source $HOME/.vimrc<cr>
    

    现在当我正在编辑任何文件并发现一个新的宏我要保存我输入时,e打开我的.vimrc。我将宏粘贴进去,添加一个map语句(根据你所处的模式有不同的地图,如果你感兴趣的话还有大量的文档可以解释这个),并保存.vimrc,也可以保存.vimrc。这样我的新映射命令在其他文件中可用而无需重新启动vim。

答案 2 :(得分:0)

以下是以交互方式运行vim命令的映射:

" run selected vimscript
vmap <Leader>r "vy:@v<CR>
" run vimscript line
nmap <Leader>r "vyy:@v<CR>

检查vim帮助:

:h :@

所以在你的情况下(愚蠢的例子):

:g/line/
:g/for/
:g/endfor/

for line in getline(1, 3)
  let @a = line
  @a
endfor

将其另存为.vim和:so%

答案 3 :(得分:0)

“命令”这个词在这里有点含糊不清。您还可以使用执行已经被拉入寄存器的Ex命令     :@” 例如,对于默认寄存器。这在你编写vimscript代码时特别有用,例如在.vimrc文件中,你想测试函数或映射以确保它们正常工作。

所以如果你有一个包含

的缓冲区
tabedit http://stackoverflow.com/questions/1830886/vim-executing-a-list-of-editor-commands
%s/intuited/The King Of Everything/g
w /tmp/superduperawesome.html
!/usr/bin/sensible-browser /tmp/superduperawesome.html

您可以使用正常模式操作

ggyVG:@"

显示此页面略有不同的版本。

也可以使用

执行存储在寄存器或变量中的代码
:execute @"

但似乎有一些奇怪的问题:它会在命中评论或结束时停止执行。我没有遇到过这些问题:@“。