我的问题是如何将一个多部分命令映射到一个单键组合键。
在我的.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>
做什么吗?)
发布于 2013-06-06 20:56:22
是的,:!
命令将命令行的其余部分作为参数。要连接其他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>
代表回车。
https://unix.stackexchange.com/questions/78505
复制相似问题