在vim中有没有一种方法让:W执行与:w相同的操作?

21

对于 :q 和 :Q 也是一样的。我几乎总是没有及时松开 shift 键,而且由于 :Q 和 :W 很少使用,所以我认为让它们与小写字母的命令相同会更好。

6个回答

14

通过使用:cmap:cabb来实现此操作,但这些方法会产生副作用(即其他实例也将被意外转换)。

cmdalias插件能够更好地完成这项工作。

但我认为对于您的用例最好定义自己的大写命令变体。主要挑战是支持原始命令所具有的所有选项:

command! -bang -range=% -complete=file -nargs=* W <line1>,<line2>write<bang> <args>
command! -bang Q quit<bang>

谢谢。另外,我该如何取消命令映射?我想对 :x 和 :X 做同样的事情,因为我从不使用加密。 - dwcanillas
命令!Q q 命令!W w没有差别。 - dwcanillas
@dwcanillas::X 是特殊的;通常 Vim 命令都是小写的。你需要使用 cmdalias 来执行它。 - Ingo Karkat
@dwcanillas:简单的 command! W w 不能传递范围或文件名。命令不像映射一样简单地替换! - Ingo Karkat
Ingo: 为什么定义大写命令变体比使用cmdalias插件更好?我和OP处于相同的情况:经常发现自己输入了 :W 而不是 :w。 - dgrogan
@dgrogan::W 命令是一流的;你可以自动完成它,在映射中使用它,记录它,将它放在历史记录或 Vimscript 中等等。cmdalias 通过操作你输入的命令行来工作,有时会出现一些奇怪的行为(虽然你通常不会注意到)。但是:如果你已经使用了 cmdalias,请继续使用它来定义一个 :W 别名。 - Ingo Karkat

4

是的,你可以在你的 .vimrc 文件中重新映射它们,像这样:

cabb W w
cabb Q q

或者

cmap W w
cmap Q q

优点是无论大小写,"W"都会扩展为"w"(cmap显示更改,cabb则不显示)。
在Vim中重新映射键通常很容易。请尝试查看以下教程:在Vim中映射键编辑: 正如@IngoKarkat所指出的,这是一个hackish解决方案。我将其保留在这里,因为它快速且容易。然而,缺点也很明显;它会干扰其他用途。

2
这会产生不良的副作用,例如如何搜索大写的“Willy”或“Queen”呢? - Ingo Karkat
谢谢。我对vimrc还很陌生,所以当我查看维基和帮助文档时,很难理解键映射。我实际上不确定我是否找到了你链接的页面,但那个页面似乎做了一个很好的工作来解释一切。再次感谢! - dwcanillas
这确实是一个hackish的解决方案。@IngoKarkat的解决方案更好,我建议你接受他的建议。 - David Cain
不要这样做 - 它会阻止在命令行中输入大写字母 W 和 Q。 - Daniel Kukula

3

您可以通过将以下条目添加到您的.vimrc中来定义WQ

command! W write
command! Q quit

1
这是一个非常干净的解决方案。 - dean3148834

3

noremap对我来说没有任何已知的副作用。

noremap :W :w

3
你的方法的副作用是在输入“:”后,命令行模式需要等待一段时间才能启动。虽然很短暂,但我发现这种缺乏即时反馈的情况很烦人。 - Ingo Karkat
1
是的,我猜如果我只输入“:”,它确实会导致延迟,但我几乎从不在输入命令之前等待命令模式变为活动状态,所以这并没有困扰我。 - Sam Brinck
2
@IngoKarkat nnoremap :W :w<cr> , 这将消除延迟。 - user13786942

2

假设您正在寻找更快的方法执行:wq

实际上,这是将ESC:(它本身是Shift+;)组合起来,然后按下wqEnter。总共需要五个按键,如果将:算作两个,则需要六个按键。

相反,请尝试按下ESC,然后(保持)按下Shift,再按下Z,然后再按一次Z(根本不需要:)。它会立即保存并退出文件。少一个按键(或两个,取决于您如何计算),而且更难出错。


虽然这不是问题的答案,但它是解决潜在问题的方案。非常赞!然而,“shift+z+z”不是“:wq”的快捷键,而是“:x”的快捷键。这里解释了它们之间的区别:https://vi.stackexchange.com/a/5726/7979 - gschenk

1
这不是对你问题的回答,而是对你问题的解决方案——“我几乎总是不能快速释放Shift键”。交换冒号和分号的含义。然后就不需要按Shift键了,因为你将使用;w;q
nnoremap ; :
nnoremap : ;
vnoremap ; :
vnoremap : ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接