首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Vim中为命令创建别名?

如何在Vim中为命令创建别名?
EN

Stack Overflow用户
提问于 2010-10-07 12:31:48
回答 8查看 71.7K关注 0票数 167

Vim是我在编程时首选的文本编辑器,因此我总是遇到一个特别烦人的问题。

通常,当我很快需要保存缓冲区并继续执行其他一些杂项任务时,我会执行典型的

代码语言:javascript
运行
复制
:w

然而,我总是--似乎有超过50%的时间--设法将这一点转化为:w。当然,Vim会对我大喊大叫,因为W是一个无效的命令:

代码语言:javascript
运行
复制
E492: Not an editor command: W

我的问题是如何在Vim中使用别名冒号命令。特别是,您能否举例说明如何将W别名为w

我知道将键映射到某些命令的过程,但这不是我要找的。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-10-07 16:03:16

若要保持补全不变,请尝试使用

代码语言:javascript
运行
复制
cnoreabbrev W w

它会将命令行中的W替换为w,但前提是命令行后面和前面都不是word字符,因此:W<CR>将替换为:w<CR>,但:Write不会。(请注意,这会影响任何匹配的命令,包括您可能不期望的命令。例如,命令:saveas W Z将被:saveas w Z替换,因此要小心使用。)

更新

下面是我现在要写的内容

代码语言:javascript
运行
复制
cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))

作为函数:

代码语言:javascript
运行
复制
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更安全。

票数 142
EN

Stack Overflow用户

发布于 2010-10-07 12:34:57

通过补充搜索,我发现有人问了和我几乎相同的question

代码语言:javascript
运行
复制
:command <AliasName> <string of command to be aliased>

就能达到目的。

请注意,正如指出的那样,用户命令必须以大写字母开头。

票数 112
EN

Stack Overflow用户

发布于 2014-02-14 01:50:42

我发现将;键映射到:会是一个更好的解决方案,并且会使您在键入其他命令时更有效率。

代码语言:javascript
运行
复制
nnoremap ; :
vnoremap ; :
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3878692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档