Vim 命令映射

Vim 命令映射

我的问题是关于将多部分命令映射到单个组合键。

在我的 .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>代表回车

相关内容