如何vim
有条件地映射一个序列以运行两个外部程序中的任何一个,这样屏幕不会被清除以显示该else
子句?
例如:
:nmap <c-l> :if filereadable('Makefile')<CR>!make<CR>else<CR>!ls<CR>endif<CR>
ctrl
+m
执行make
但随后清除屏幕并在其底部打印以下内容:
: else
: !ls
: endif
Press ENTER or type command to continue
如何vim
有条件地映射一个序列以运行两个外部程序中的任何一个,这样屏幕不会被清除以显示该else
子句?
例如:
:nmap <c-l> :if filereadable('Makefile')<CR>!make<CR>else<CR>!ls<CR>endif<CR>
ctrl
+m
执行make
但随后清除屏幕并在其底部打印以下内容:
: else
: !ls
: endif
Press ENTER or type command to continue
您可以使用表达式映射( :help map-expr
)
:nnoremap <expr> <c-m> filereadable('Makefile') ? ':make<CR>' : ':!ls<CR>'
笔记:
:noremap
; 它使映射不受重新映射和递归的影响。<C-m>
<CR>
与;相同 目前无法区分两者;更好地使用不同的键。有关更多信息,请参阅此答案。你需要map <expr>
例如:
nnoremap <expr> <c-t> line('.')>=6? ':!ls<cr>' : ':!seq 10<cr>'
在你的例子中:
:nnoremap <expr> <c-m> filereadable('Makefile') ? ':make<CR>' : ':!ls<CR>'
详细信息:
:h :map-<expr>
请注意,如果您 map <c-m>
,Enter
也将遵循该映射。除非您打算这样做,否则最好使用另一个组合键。