【问题标题】:How to jump into parenthesis in VIM如何在 VIM 中跳入括号
【发布时间】:2012-06-12 01:42:12
【问题描述】:

目前,我正在尝试学习 VIM 并禁用所有模式的箭头键。在输入新函数时,我总是同时打开和关闭括号,以免忘记它们。因为,我不能返回(没有箭头键)我想知道它是如何在 VIM 中完成的,因为一旦关闭,你就在括号之外。

退出 INSERT 模式,移动到括号中并再次进入 INSERT 模式是标准做法吗?或者你只是让括号保持打开状态直到你完成?

我知道 AutoClose 脚本。这个问题更有助于理解 VIM 的做事方式,所以我想知道其他开发人员是如何克服这个问题的。

【问题讨论】:

  • 你说的是%还是f)
  • 不,我的意思是一旦它被关闭,我如何回到括号中(); //光标现在在这里。在其他编辑器中,您只需使用箭头键,但我禁用了我的以适应 VIM 模式。
  • 使用 vim 几天后,您甚至不会注意到进入和退出模式。 vim 的目的是让你所做的一切都成为操作文本的第二天性。用不了多久,年轻的绝地武士。

标签: vim


【解决方案1】:

忘记右括号会导致稍后出现突出显示问题,因此您不太可能进一步忽略它们。

我建议养成在键入时在括号中间键入参数的习惯,并在完成参数后关闭括号。 (如果你正在尝试学习vim,无论如何,这种变化似乎并不会太大而无法适应——你必须适应的其他事情的数量已经非常惊人了。)

【讨论】:

    【解决方案2】:

    一种选择是使用键映射跳转到左括号/括号。我倾向于立即关闭括号/括号以确保它们是平衡的(即使 vim 会生气地让我知道如果发生这种情况我会错过它们? - 习惯的力量)。把这个映射放到你的 vimrc 中:

    imap <C-S-h> <esc> :call search("[{[(]", "bes")<CR> i

    下面是命令分解:

    • 在编辑模式下将<CTRL-SHIFT-h>映射到
    • <ESC>(返回正常模式),
    • :call search("[({[]", "bes")<CR> 向后搜索左括号/括号并跳转到它,最后
    • i返回插入模式

    所以我可以输入foo();,然后输入<CTRL-SHIFT-h> 以跳回括号中提供参数。

    有点相关:看看vim-surround plugin,一旦你掌握了它,它就会提高生产力!

    【讨论】:

      【解决方案3】:

      Vim 模式特性背后的想法是,您将大部分时间都花在普通模式下,而不是插入模式下。只有当您想要插入文本时,您才进入插入模式,并且当您想要执行不插入原始文本的操作时 - 您会返回正常模式。

      无论如何,如果由于某种原因您不想离开插入模式,您可以按CTRL+o 运行单个正常模式命令。但我建议习惯于在模式之间切换——切换模式应该是 Vim 用户的第二天性。

      【讨论】:

        【解决方案4】:

        首先,在命令模式下,% 会将您移动到相应的括号、大括号或方括号。

        回答您的问题:是的,那些立即关闭括号、大括号、方括号等的人……很可能退出命令模式,然后重新进入插入模式以返回编辑。

        对我来说,这甚至不是我注意到的事情。很快你就会和以前一样了。

        每当我开始一个新的 if 语句时,我都会立即打开和关闭大括号。添加右大括号后,我点击 ESCO 打开右大括号上方的行(或 ESCki)。然后我又开始打字了。

        这绝不会给我带来不便或问题。所有这些很快就会成为你的第二天性......

        此外,您甚至不会再考虑那些箭头键...您只需使用 h 返回(或更好的东西)。

        【讨论】:

          【解决方案5】:

          问题:退出 INSERT 模式,移动到括号中并再次进入 INSERT 模式是标准做法吗?或者你只是让括号保持打开状态直到你完成?

          Answer: 通常只输入函数参数,然后输入右括号。但是,是的,如果您已经输入了),然后您决定要返回一个字符,您可能只需点击 Escape 键,然后点击 i 以在当前位置之前插入。这只是两次击键,有经验的 vi 用户很习惯按 Escape 键。

          如果您确实输入了);,那么您需要按Escape 键,然后按hi。如果你经常这样做,你会习惯的。

          某些键组合成为第二天性。例如,可以在vi中通过x转置两个字符,删除光标下的字符,使光标在下一个字符上;然后p,将该字符粘贴到光标位置之后。在我的一生中,我已经输入了足够多的xp,以至于我什至没有考虑过……我的手指只知道那些键在哪里。我只是想“哦,我需要交换那些字符”,然后我的手指猛击了xp

          【讨论】:

          • 同意...在使用 vim 几天后,OP 甚至不会考虑这些事情。 vi 的全部意义在于,您为操作文本所做的一切都会成为第二天性。
          【解决方案6】:

          根本不需要停止使用箭头键。这是一个愚蠢的想法。

          hjkl 比箭头键“更好”如果您触摸类型,因为它位于主行。如果你不触摸类型,你的手已经自然地做了很多运动,其余的都可以伸手去拿方向键。如果您不触摸类型,则没有主行。

          不过,您的问题并不是真正的 hjkl 与箭头问题。您可以养成只输入左括号、然后是参数、然后是右括号的习惯,或者使用“自动关闭”机制来解决它。

          您可以通过将此行添加到您的~/.vimrc 来以天真的方式做到这一点:

          inoremap ( ()<C-o>h
          

          或使用the many plugins available之一。

          【讨论】:

          • 哈哈,我试过放弃方向键,因为这是 vim 用户的一般建议,hjkl 应该更快,等等等等。有一半时间,当我真正想要h 时,我发现自己点击了j,反之亦然。毕竟方向键还不错,哈哈。
          • 那些坚持放弃hjkl 的人要么是为了适应而重复他们不理解的东西的新手,要么是忘记自己是非常非常少数的打字员。跨度>
          猜你喜欢
          • 2012-04-23
          • 2017-09-29
          • 2011-09-26
          • 1970-01-01
          • 2020-11-19
          • 2022-11-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多