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