【问题标题】:VIM navigate on insert modeVIM 在插入模式下导航
【发布时间】:2012-02-03 17:16:38
【问题描述】:

VIM 最让我烦恼的一件事是在插入模式下必须移动。使用任何其他程序,我可以使用箭头键四处移动,但使用 VIM,我已经学会使用 h/j/k/l,为了进入该模式,我必须再次按 Escape,有没有更快的方法这样做?

【问题讨论】:

  • vim 的一般租户之一是不在插入模式下导航。通常将大写锁定映射到 ESC 以更容易退出插入模式。另一个通用的 vim 租户是尽可能少地处于插入模式。
  • 请参阅viemu.com/a-why-vi-vim.html的“误解#1”
  • 我认为你应该训练肌肉记忆 =)
  • 你是什么意思ck3g?你的意思是训练它使用 ESC 键?

标签: vim move


【解决方案1】:

如果您想移动超过一个或两个位置...

...最好的选择是点击ESC,四处走动,然后再次回到插入模式。

没有必要创建像<C-h> 这样的映射来向左移动然后开始多次点击它......作为vim 用户,你不应该多次点击同一个键来实现智能移动。

(如果 ESC 键没有靠近您的手指,那么为其创建映射将是一个不错的选择。)

如果您想在插入模式下移动一个或两个位置...

...一个不错的选择是使用<Leader> 键定义一些动作:

(我使用 , 作为 <Leader> 键,因为它对我的手指来说感觉很舒服)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward

【讨论】:

    【解决方案2】:

    您可以通过键入 ^O 进行导航来暂时退出插入模式。有助于通过自动插入的右括号。

    如果你的终端是已知的,大多数时候 vim 会理解页面移动按钮。原来的vi没有,这个命令一直都有。

    有用的肌肉记忆:

    ^Oo - 在下方停止和打开线,大写 O 在上方 ^OA - 到行尾继续插入 ^OI - 从行首开始插入

    顺便说一句:

    至少 23 年前,我曾经在系统 V 上使用 vi。个人觉得 vi 有哲学的想法很有趣。这是一个由一个孤独的程序员匆忙编写的对 ex 的务实替代。它的实用主义是它幸存下来的原因,因为它很容易移植到任何 Unix。为了获得最佳效果,您应该学习如何使用 f、t、逗号和分号 - 当您将它们与 c 一起使用时,它们可以为您节省很多精力。

    【讨论】:

    • 我正在做同样的事情来跳过右括号,直到我发现输入右括号本身只会让我在不插入新括号的情况下接管它,非常有用!
    【解决方案3】:

    如果您的 vimrc 文件中有一行看起来像 set term=ansi,请将其注释掉。一旦我这样做了,我就可以使用箭头键导航插入模式了。

    【讨论】:

      【解决方案4】:

      您可以使用Ctrl+C 退出插入模式。向您的 vimrc 文件添加内容有一个警告:如果您在远程服务器上,它们将不起作用。

      【讨论】:

        【解决方案5】:

        使用 CTRL-[

        insert.txt 帮助文件中有一个关于 :hi_CTRL-[

        的建议(可能来自 Bram)

        "注意:如果您的键很难在键盘上敲击,请训练自己使用 CTRL-[。"

        【讨论】:

          【解决方案6】:

          我已将退出按钮映射到 jj。

          imap jj <ESC>
          

          这样,当我想快速进入正常模式时,我双击 jj 并且我的手指处于开始导航的好位置。

          一开始可能看起来很尴尬,但是一旦你有了肌肉记忆,它就会像闪电一样。

          【讨论】:

          • 如果需要插入'jj',是不是慢慢做?
          • 是的,这是正确的,很少有 2 个字母需要放在一起,但是当它们需要时,我必须慢慢按下
          • 我确实已经映射了 jj,我想我没有想太多。我还发现了这个答案,它有进一步的帮助:stackoverflow.com/questions/1737163/…
          • 如果你在它前面加上你想要的mapleader会更好:) inoremap jj
          • 也许可以,但是每次使用它时都需要额外的点击来解决很少发生的问题。
          猜你喜欢
          • 2015-04-30
          • 2017-03-14
          • 2018-06-17
          • 1970-01-01
          • 1970-01-01
          • 2012-09-06
          • 1970-01-01
          • 2011-10-18
          • 1970-01-01
          相关资源
          最近更新 更多