我想在 VIM 中映射 F2 以便它首先保存文件,:w
然后调用/home/user/proj/script.sh
将更改的文件上传到服务器的脚本。我已经试过了
:map F2 :w<cr>|:! /home/user/proj/script.sh
但这不起作用。
请告诉我为什么这不起作用并帮助我使其正常工作。
我想在 VIM 中映射 F2 以便它首先保存文件,:w
然后调用/home/user/proj/script.sh
将更改的文件上传到服务器的脚本。我已经试过了
:map F2 :w<cr>|:! /home/user/proj/script.sh
但这不起作用。
请告诉我为什么这不起作用并帮助我使其正常工作。
试试:noremap <F2> :<c-u>update <bar> !/home/user/proj/script.sh<cr>
。
noremap
对比map
这将创建一个非递归映射。参见Wikia - Vim 中的映射键
我只是假设这一点,因为这是人们大部分时间想要的。:-)
update
对比write
仅在有实际更改时才保存文件。见::help :update
。
<bar>
对比|
:help map_bar
<c-u>
?
您使用了通用映射,而不是用于特定模式的映射,例如nmap
普通模式映射。因此,映射也可以在视觉模式下触发。如果您在可视模式下选择某些内容并点击:
,您将看到命令行以范围为前缀。但是您不希望在您的情况下这样做并<c-u>
清除命令行。
<cr>
在最后?
您的映射进入命令行模式并插入 2 个由<bar>
. 之后它必须执行它所写的内容,因此您需要附加一个<cr>
.