gpt4 book ai didi

vim - 如何在 vim 中有效地添加括号或字符串?

转载 作者:行者123 更新时间:2023-12-02 01:00:36 33 4
gpt4 key购买 nike

在传统的文本编辑器中,每当我需要打开一个字符串或括号并在它们之间输入一些内容时,我通常会这样做:

  1. 输入 ()""
  2. 向左键
  3. 输入我需要的内容
  4. 按右

但是在 vim 中(也就是说,如果我遵循 vim way )这个过程变得非常乏味,因为我必须进入正常模式才能移动很多次:

  1. 输入 ()""
  2. <ESC>
  3. i
  4. 输入我需要的内容
  5. <ESC>
  6. l
  7. a

如果在任何时候使用箭头键都不是一个好习惯,那么在 vim 中是否有更有效的方法来完成此类任务?

最佳答案

实际上很容易在映射中自动附加那些结束字符,并将光标放在您想要的位置。诀窍是这样做,同时又不会弄乱撤消/重做/重复操作。问题是插入模式下的光标移动命令会破坏“撤消序列”,因此您在移动光标后所做的任何更改都将与移动光标前所做的更改分开撤消。

警告:以下信息可能会过时

有很多插件可用于自动附加这些字符(请参阅 Vim wiki page for appending closing characters 中的部分列表),在 Vim 7.4 之前,其中一些甚至有复杂的解决方法来保持撤消序列的完整性。不幸的是,他们都依赖于 Vim 中的一个错误,该错误已在 7.4 版中修复。

补丁可用于 add a cursor movement that does not break undo ,所以如果你想 compile Vim yourself ,您可以获取该补丁并使用如下映射(无需插件!)来执行您想要的操作:

inoremap            (          ()<C-G>U<Left> 
inoremap <expr> ) strpart(getline('.'), col('.')-1, 1) == ")" ? "\<C-G>U\<Right>" : ")"

这些映射会在你键入一个开头的 ( 时插入 "()",将光标放在括号之间。当你键入 ')' 并且光标后已经有一个结尾的 ')' 时,Vim 将跳过括号而不是插入一个新的。光标移动之前是 <C-G>U这是上述补丁添加的功能,允许以下光标移动不会破坏撤消序列(只要移动全部在一行中)。

从 Vim 7.4.663 开始,这个补丁还没有正式包含在内。

关于vim - 如何在 vim 中有效地添加括号或字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29066542/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com