如何在有条件地映射vim中的序列以运行外部程序而不打印else子句

n.r*_*.r. 2 vim

如何vim有条件地映射序列以运行两个外部程序中的任何一个,以便屏幕不会被清除以显示该else子句?

例如:

:nmap <c-l> :if filereadable('Makefile')<CR>!make<CR>else<CR>!ls<CR>endif<CR>
Run Code Online (Sandbox Code Playgroud)

ctrl+ m执行make但随后清除屏幕并在其底部打印以下内容:

:  else
:  !ls
:  endif
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)

Ing*_*kat 9

你可以使用表达式mapping(:help map-expr)

:nnoremap <expr> <c-m> filereadable('Makefile') ? ':make<CR>' : ':!ls<CR>'
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 你应该使用:noremap ; 它使映射不受重映射和递归的影响.
  • <C-m>是一样的<CR>; 目前没有办法区分这两者; 更好地使用不同的键.有关更多信息,请参阅此答案.