我的问题是关于将多部分命令映射到单个组合键。
在我的 .vimrc 中,我有以下行:
nnoremap <leader>ss :w\|:silent !execute_external_script > output_of_script.txt\|:redraw!<cr>
正如您所看到的,当我按下 时,我想要执行三个命令<leader>ss
。首先,编写文件,然后执行我的外部脚本(该脚本运行单元测试)。不幸的是,我的终端在执行 shell 命令后没有重绘 Vim。所以我尝试附加该:redraw!
命令,显然该命令正在传递给 shell,而不是 Vim,因为我收到此错误:
bash: :redrawecho: command not found
。
如何编写命令以便脚本在 shell 中执行,然后重绘在 Vim 中执行? (另外,作为奖励,有人能解释一下<cr>
是什么吗?)
答案1
是的,该:!
命令将命令行的其余部分作为参数。要连接其他 Vim 命令,您可以使用以下命令包装该命令:execute
:
nnoremap <leader>ss :w\|:silent execute '!execute_external_script > output_of_script.txt'\|:redraw!<cr>
或者,您可以只发出多个命令行,用<CR>
;分隔。毕竟,映射只是一个固定的宏:
nnoremap <leader>ss :w\|:silent !execute_external_script > output_of_script.txt<cr>:redraw!<cr>
另请注意:\|
通常的方法是使用特殊的<Bar>
键码,而不是转义命令分隔符;完整列表请参见:help keycodes
;这也解释了<CR>
代表回车。