Vim是我在编程时首选的文本编辑器,因此我总是遇到一个特别烦人的问题。
通常,当我很快需要保存缓冲区并继续执行其他一些杂项任务时,我会执行典型的
:w然而,我总是--似乎有超过50%的时间--设法将这一点转化为:w。当然,Vim会对我大喊大叫,因为W是一个无效的命令:
E492: Not an editor command: W我的问题是如何在Vim中使用别名冒号命令。特别是,您能否举例说明如何将W别名为w。
我知道将键映射到某些命令的过程,但这不是我要找的。
发布于 2010-10-07 16:03:16
若要保持补全不变,请尝试使用
cnoreabbrev W w它会将命令行中的W替换为w,但前提是命令行后面和前面都不是word字符,因此:W<CR>将替换为:w<CR>,但:Write不会。(请注意,这会影响任何匹配的命令,包括您可能不期望的命令。例如,命令:saveas W Z将被:saveas w Z替换,因此要小心使用。)
更新
下面是我现在要写的内容
cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))作为函数:
fun! SetupCommandAlias(from, to)
exec 'cnoreabbrev <expr> '.a:from
\ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
\ .'? ("'.a:to.'") : ("'.a:from.'"))'
endfun
call SetupCommandAlias("W","w")这将检查命令类型是否为:,命令是否为W,因此它比cnoreabbrev W w更安全。
发布于 2010-10-07 12:34:57
通过补充搜索,我发现有人问了和我几乎相同的question。
:command <AliasName> <string of command to be aliased>就能达到目的。
请注意,正如指出的那样,用户命令必须以大写字母开头。
发布于 2014-02-14 01:50:42
我发现将;键映射到:会是一个更好的解决方案,并且会使您在键入其他命令时更有效率。
nnoremap ; :
vnoremap ; :https://stackoverflow.com/questions/3878692
复制相似问题