Answers:
正如Peter Rincker指出的那样,cmap
s也可以在其他地方扩展,所以a cnoreabbrev
会更好:
cnoreabbrev w' w
或者,最安全的还是再次感谢Peter:
cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
通过显式检查命令行是否仅包含w'
,可以避免情况下的不必要扩展。
您可以使用cmap
:
cmap w' w
您仍然需要按Enter,但是'
现在应该忽略意外事件。
如果您使用cmdwin
,则inoremap
set by autocmd
可能会有用:
autocmd CmdwinEnter * inoremap w' w
autocmd CmdwinLeave * iunmap w'
:cmap w' w
,但是行为没有改变。 :w'
仍然导致写入名为的文件'
。"'" [New] 0L, 0C written
。
'
按下后实际显示w
吗?如果cmap
成功创建,则不应该-RHS会自动填充一个cmap LHS,因此,如果按a '
,它仍应仅显示w
。
cmap
的和cabbrev
。它们将在其他模式和其他位置执行/扩展。例如:s/'follow'/foo
和/'follow'
。请看下面的VIM的变化:X功能删除缓存,而不是保存并退出或使用cmdalias.vim
cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
'
仍然显示出来,但我只是发现这是因为我使用cmdwin输入命令,而cmdwin只是一个常规缓冲区,所以cmap/cnoreabbrev
不要在那里使用。使用noreabbrev
cmdwin用户的选项更新答案。:) 谢谢!!!
此方法对我有用:
:ca w' w
另外,您可以设置vim以在您按两次Esc键时保存当前缓冲区,例如
:map <Esc><Esc> :w<CR>
或使用以下映射通过Ctrl+ s或+ 保存文件F2:
nmap <c-s> :w<CR>
vmap <c-s> <Esc><c-s>gv
imap <c-s> <Esc><c-s>
nmap <F2> :update<CR>
vmap <F2> <Esc><F2>gv
imap <F2> <c-o><F2>
注意:F2仅在必要时保存,并根据需要使用户返回插入模式(或恢复其视觉选择)。
来源:在Vim Wikia上保存文件
或使用以下替代方法:
:up
(:update
)的:w
:q
:wq
或:x
:w'
不是:w
。我希望使用时:w
不会意外击中'
该文件,然后写入该文件rm \'
。好提示,但是。