VIM - 同一行上的多个命令

Bub*_*lee 179 vim command

我一直试图找到一些东西让我在vim的同一行上运行多个命令,类似于使用分号分隔*nix系统或&windows中的命令.有没有办法做到这一点?

mic*_*ael 230

一个酒吧|将允许您这样做.从:help :bar

'|'可用于分隔命令,因此您可以在一行中提供多个命令.如果要'|'在参数中使用,请在其前面加上'\'.

例:

:echo "hello" | echo "goodbye"

输出:

hello
goodbye
Run Code Online (Sandbox Code Playgroud)

注意:您可能会发现您~/.vimrc不支持映射|,或\|.在这些情况下,请尝试使用<bar>.

  • 当你发现自己想在`map`语句中使用多个命令时(相信我,你会),请查看`:help map_bar`. (29认同)
  • 确实如此.几个月前我就超级用户问过这个问题.我的`.vimrc`不支持映射的转义栏(`\ |`).我知道我必须输入`<bar>`. (8认同)
  • 请注意少数与```不兼容的命令! (7认同)

Bab*_*yan 85

<CR>在命令之间和之后放入(回车/回车).例如:

map <F5> :w<CR>:!make && ./run<CR>
Run Code Online (Sandbox Code Playgroud)

不要使用|因为:

  • 如果您使用|它们,某些命令会出现问题

  • | 在配置文件中不能始终如一地工作,请参阅 :help map_bar


Jon*_*tan 41

您可以定义执行命令的函数.

function Func()
     :command
     :command2 
endfunction
Run Code Online (Sandbox Code Playgroud)

并将其放在例如你的vimrc中.运行该功能

exec Func()
Run Code Online (Sandbox Code Playgroud)

  • 清洁溶液。对于两个以上或只是长命令来说肯定会很方便。 (2认同)
  • 使用`:call Func()` 更为传统,因为`:execute Func()` 意味着更多。表示将函数的返回值作为命令执行。这里描述的函数通常没有以`:return`开头的命令,所以它的返回值将是数字零。将其作为命令执行会将光标移动到当前缓冲区的第一行,这并不总是您想到的。 (2认同)

Dae*_*yth 26

vim中的命令分隔符是|.


eru*_*orm 15

我总是习惯^J通过按Ctrl+ v,Ctrl+ 来分隔多个命令j.

  • 这似乎是唯一真正有效的解决方案。如果我想在字符串中使用它,我该向谁指定它? (2认同)

Jer*_*naw 11

认为这可能会帮助某人尝试在链中进行替换而失败

评论

% s/word/newword/ge | % s/word2/newword2/ge
Run Code Online (Sandbox Code Playgroud)

e当找不到字符串时,可以使用该标志忽略该错误。