我想在VIM中映射F2,以便首先使用:w
保存文件,然后调用将已更改的文件上传到服务器的脚本/home/user/proj/script.sh
。
我已经尝试了
:map F2 :w<cr>|:! /home/user/proj/script.sh
但这不起作用。
请告诉我为什么这不起作用并帮助我实现这一目标。
答案 0 :(得分:5)
尝试:noremap <F2> :<c-u>update <bar> !/home/user/proj/script.sh<cr>
。
noremap
与map
这会创建一个非递归映射。见Wikia - Mappings keys in Vim
我只是假设这一点,因为这是人们大多数时候想要的。 : - )
update
与write
如果有实际更改,则仅保存文件。请参阅::help :update
。
<bar>
与|
:help map_bar
<c-u>
您使用通用映射,而不是某个模式,例如nmap
用于普通模式映射。因此,映射也可以在视觉模式中触发。如果您以可视模式选择某个内容并点击:
,您将看到命令行带有一个范围前缀。但是你不希望在你的情况下<c-u>
清除命令行。
<cr>
?
您的映射将进入命令行模式并插入由<bar>
分隔的2个事物。之后它必须执行它所写的内容,因此你需要附加一个<cr>
。