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

如何在vim中有效地添加括号或字符串?,vim,Vim,在传统的文本编辑器中,每当我需要打开字符串或括号并在它们之间键入内容时,我都会执行以下操作: 键入()或“” 按左键 输入我需要的东西 按右键 但是在vim中(如果我遵循),这个过程变得非常乏味,因为我必须进入正常模式才能移动一整串时间: 键入()或“” 按 按i 键入我需要的内容 按 按l 按a 如果在任何时候使用箭头键都不是一种好做法,那么在vim中是否有更有效的方法来执行此类任务?否。在vim中执行此操作与在“传统”编辑器中完全相同: 键入()或“” 按左键 输入你需要的东西 按右键 但是

在传统的文本编辑器中,每当我需要打开字符串或括号并在它们之间键入内容时,我都会执行以下操作:

  • 键入
    ()
    “”
  • 按左键
  • 输入我需要的东西
  • 按右键
  • 但是在vim中(如果我遵循),这个过程变得非常乏味,因为我必须进入正常模式才能移动一整串时间:

  • 键入
    ()
    “”
  • i
  • 键入我需要的内容
  • l
  • a

  • 如果在任何时候使用箭头键都不是一种好做法,那么在vim中是否有更有效的方法来执行此类任务?

    否。在vim中执行此操作与在“传统”编辑器中完全相同:

  • 键入
    ()
    “”
  • 左键
  • 输入你需要的东西
  • 右键
  • 但是…你为什么不先键入开头字符,然后键入结尾字符

  • 键入
  • 键入所需内容
  • 键入

  • 太简单了?

    我认为在正常模式下使用箭头键移动是不好的做法,但在您的情况下;在插入模式下移动一个空格,我敢说使用箭头键可能是最好的做法

    也就是说,如果你下定决心要避免它们,你可以使用

    :帮助i\u ctrl\u o

    CTRL-O      execute one command, return to Insert mode   *i_CTRL-O*
    
    因此,在插入模式下,您可以键入:
    ()hl
    ,其中
    是括号中所需的内容

    不幸的是,如果光标位于行的最后一个字符上,则该操作不起作用,如果您正在键入,则很可能是这样

    要解决该问题,请执行以下操作:设置virtualedit+=onemore,或将其添加到
    ~/.vimrc
    文件中


    请注意,此解决方案比简单地使用箭头键更容易击键,但您不需要将手从起始行移开,因此速度可能更快。

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

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

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

    有一个补丁可供使用,因此如果您愿意,可以获取该补丁并使用如下映射(无需插件!)来完成您想要的操作:

    inoremap            (          ()<C-G>U<Left> 
    inoremap <expr>     )          strpart(getline('.'), col('.')-1, 1) == ")" ? "\<C-G>U\<Right>" : ")" 
    
    inoremap(()U
    inoremap)strpart(getline('.')、col('.')-1,1)=“”?“\U\”:“””
    
    当您键入一个开始(,将光标放在括号之间时,这些映射将插入“()”。当您键入“')”并且光标后已经有一个结束“')”时,Vim将跳过括号而不是插入新的括号。光标移动之前有
    U
    ,这是前面提到的补丁添加的功能,允许以下光标移动不会中断撤消序列(只要移动都在一行中)


    从Vim 7.4.663开始,此修补程序尚未正式加入。

    您可以在Vim中按
    A
    来代替
    la
    ,通常您不会先写“”或(),而只是开始写“”,写字符串并以“”结尾在您离开插入模式之前,请再次尝试。您还可以尝试的可能副本。这是一个奇怪的特定用例。我不知道你在用Vim做什么,但我个人不会为额外的笔划操心。实际上,立即再次关闭东西是一个好习惯,所以你不能忘记任何关闭。再次向左和向右按压是非常值得的。