【问题标题】:Visual block insert/append doesn't work视觉块插入/追加不起作用
【发布时间】:2013-02-17 20:53:16
【问题描述】:

我使用 Ctrl-V 选择了一个文本块,但是当我随后键入 Shift-AShift-I,我的 vim 编辑器仅在我开始可视块模式的位置进入插入模式。

例如,

Here
is 
text

我想要

#Her 
#is 
#text

但我明白了:

#Here
is 
text

【问题讨论】:

  • 这很正常。
  • 我遇到了这个问题。可能是您的 Ctrl-V 在 GUI 级别被拦截和转换。您的终端程序可能会在 vim 看到它之前捕获 Ctrl-V 并将其更改为其他内容。对我来说,事实证明很久以前我曾摆弄过 Konsole 快捷键并将 Ctrl-V 重新映射到 Shift+ins 以解决兼容性问题。要修复,我去了 konsole -> 设置 -> 配置快捷方式 -> 删除 Ctrl-V 到 Shift+ins 的重映射。证明是否是这种情况的一种方法是使用 vim 将不同的击键重新映射到 vimrc 中的 Ctrl-V 以绕过拦截。
  • 对我来说同样的问题,在 Mac 上使用 zsh,以下答案均无效。我可以很好地使用 Ctrl-V,而且经常这样做,但是 Shift-i 将我踢出可视模式并进入普通(不是多行)插入模式。
  • 确保通过某种运动(运动计数、运动匹配等)来选择块。如果您使用文本对象突出显示该块,那么我观察到这种行为,它只是恢复到在原始光标位置插入。

标签: vim


【解决方案1】:

确保使用 ESC 退出可视块,而不是 Ctrl C

另外,Vim 不会在可视块模式下实时更新,您必须离开可视块模式才能在其他行显示更改。

你只会看到:

#Here
is 
text

在你进入可视块并插入#,但一旦你离开可视块模式按ESC,它应该看起来像:

#Here
#is 
#text

【讨论】:

    【解决方案2】:

    Ctrl-V->选择方块->按I->输入#

    然后按ESC

    更多细节:

    :h v_b_I
    

    你可以看到:

    Visual-block Insert                     *v_b_I* 
    
    With a blockwise selection, I{string}<ESC> will insert {string} at the start 
    of block on every line of the block, provided that the line extends into the block. 
    

    【讨论】:

    • 请注意,随 Ubuntu 14.04 安装的默认 vim(安装为 vi)不包括 visualextra 功能,因此块插入在此处不起作用。 sudo apt-get install vim 带来了一个功能更全面的版本,在该版本上激活了visualextra。您可以查看vim --version 的输出以查看已激活功能的完整列表。
    • esc 是关键。我一直在使用 C_c 来逃避插入模式。 :|
    • 注意“等待1秒,插入的文字会出现在每一行”
    • 我到press I (shift + i) 进入zsh,由于某种原因似乎只编辑了一行
    • 好的,它似乎只有在我编辑后单击Esc 后才生效,无论如何让vim实时显示多列编辑更改
    【解决方案3】:

    对我来说,问题在于我使用的是逐行视觉模式(即通过按 V 进入视觉模式),而不是按块视觉模式(即通过使用 Ctrl-v 进入视觉模式)。另请注意,您必须使用&lt;Esc&gt;(或等效地在英文键盘上使用Ctrl-[)而不是使用Ctrl-c 来退出可视模式。

    【讨论】:

    • 是的!如果您在底线看到“-- VISUAL LINE --”文本,则它不起作用。改用 CTRL+V
    • 我也是,Vim 有 -- VISUAL ---- VISUAL LINE ---- VISUAL BLOCK -- 三种可视模式,AI 仅适用于 -- VISUAL BLOCK -- .
    【解决方案4】:
    rpm -qa | grep vim
    
    vim-enhanced-7.4.160-1.el7.x86_64
    vim-common-7.4.160-1.el7.x86_64
    vim-filesystem-7.4.160-1.el7.x86_64
    
    1/just remove vi and use vim instead
    or
    2/alias vim='vi' in your bashrc
    or
    3/ln -s $(which vim) $(which vim|sed 's/vim/vi/g')
    

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 2019-09-15
      • 2011-11-10
      • 2014-04-15
      • 2018-10-19
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多