即使我是一个相对精确的打字员,但是当我去Vim的马车回来时,我常常会遇到撇号字符。当我尝试输入:w<CR>
或wq<CR>
时,会发生这种情况。我最后输入了:w'<CR>
,甚至更糟糕的是,:wq'<CR>
,除了没有按照我的意图行事之外,还会发出一些大的红色错误消息。是否有可用于克服此问题的映射或其他技术?我无法想象为什么我会想要写一个名为'
的文件,所以我并不担心完全阻止这种可能性。
答案 0 :(得分:4)
你可以做cnoremap '<cr> <cr>
。我无法想象很多次命令模式命令会在'
中结束。通常如果需要引号我使用双引号。如果有的话,只需等一下,然后按Enter键或''<bs><cr>
或其他东西。
答案 1 :(得分:4)
您必须小心使用命令映射(和缩写),它们经常在搜索期间或命令参数中间不应该触发。我通常更喜欢使用表达式缩写。
将以下内容放入~/.vimrc
:
cnoreabbrev <expr> w getcmdtype() == ':' && getcmdline() ==# 'w' ? 'w' . EatChar("'") : 'w'
cnoreabbrev <expr> wq getcmdtype() == ':' && getcmdline() ==# 'wq' ? 'wq' . EatChar("'") : 'wq'
function! EatChar(pat)
let c = nr2char(getchar(0))
return (c =~ a:pat) ? '' : c
endfunction
此缩写使用名为EatChar
的函数,该函数采用在缩放缩放后将被“吃掉”或忽略的模式。有关其用法的其他示例,请参阅:helpg Eatchar
。
只有满足以下所有条件时,缩写才会展开并看起来“吃”一个引号:
getcmdtype() == ':'
getcmdline() ==# 'w'
否则缩写将扩展为与{lhs}
相同,即w
或wq
这种方法的缺点:
:w'
,则必须输入两次引号,使用空格将命令与文件名分开,或者键入 Ctrl + < kbd> v 后跟' 有关详细信息,请参阅:
:h abbreviations
:h :map-<expr>
:h getcmdtype(
:h getcmdline(
:helpg Eatchar
答案 2 :(得分:2)
这是一种解决方法:
cnoremap w'<CR> w<CR>
cnoremap wq'<CR> wq<CR>
这会创建一个命令模式映射,将我的错误命令转换为我想要的命令。但是,它有两个缺点:
答案 3 :(得分:2)
我知道这不是您要求的确切答案,但我可能会为您提供不同的解决方案。
在您的情况下,您要求保存文件并保存和退出。也许使用其他方法之一来完成这些任务对你来说会更好。
Z Z 将保存文件(如果已修改),然后退出窗口。
为了保存文件,我做了一个领导命令来缩短我必须按下的键数
nnoremap <silent> <leader><leader> :write<cr>
您只需按两次领导键即可保存文件。我的领导是,。所以我只需点击, ,即可保存文件。