映射:w(保存)并在VIM中调用.sh文件到F2

wul*_*lxz 1 vim

我想在VIM中映射F2,以便它首先保存文件,:w然后调用一个脚本/home/user/proj/script.sh,将更改的文件上传到服务器.我已经试过了

:map F2 :w<cr>|:! /home/user/proj/script.sh
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

请告诉我为什么这不起作用并帮助我实现这一目标.

mhi*_*inz 5

试试:noremap <F2> :<c-u>update <bar> !/home/user/proj/script.sh<cr>.

noremapmap

这会创建一个非递归映射.请参阅Vim中的Wikia - Mappings键

我只是假设这一点,因为这是人们大多数时候想要的.:-)

updatewrite

仅在存在实际更改时才保存文件.见::help :update.

<bar>|

:help map_bar

<c-u>

您使用了通用映射,而不是某个nmap模式的映射,就像普通模式映射一样.因此,映射也可以在视觉模式中触发.如果您在可视模式下选择某个内容并点击:,则会看到命令行的前缀为范围.但你不希望在你的情况下,并<c-u>清除命令行.

<cr> 在末尾?

您的映射将进入命令行模式,并插入两个分隔的内容<bar>.之后它必须执行它所写的内容,因此你需要附加一个<cr>.