Vim多行编辑是否与SublimateText类似?

Vim多行编辑是否与SublimateText类似?,vim,sublimetext,text-editor,Vim,Sublimetext,Text Editor,我开始使用gvim,但我不太明白多行编辑在gvim中是如何工作的 例如: 原文: asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; ctrl+q,JJJJJ$ 选择所有内容,然后按i键进行多行插入 我的目的是插入第一行中的引号,然后按Esc键: asd

我开始使用gvim,但我不太明白多行编辑在gvim中是如何工作的

例如:

原文:

asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
ctrl+q,JJJJJ$ 选择所有内容,然后按i键进行多行插入

我的目的是插入第一行中的引号,然后按Esc键:

asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
发生了什么事?我期待一个类似于Sublimitext的行为:

如果您不知道它是如何工作的,它只会对每一行重复这些操作。如何才能做到这一点?vim在这里做什么?

如果您使用“global”命令,您可以在一行或多行线上重复您可以执行的操作

:g/<search>/.<your ex command>
上面的命令将查找具有foo的所有行,并用baz替换该行上所有出现的bar

:g/.*/

在每一行上都可以

在Vim中有几种方法可以实现这一点。我不知道哪一个是最重要的 类似于升华文本的想法


第一种是通过多行插入模式。将光标放在屏幕上 在第一行中的第二个“a”,按Ctrl-V键,选择所有行,然后按I键,然后 加上双引号。按
将在每一行上重复该操作


第二种是通过宏。将光标放在第一个字符上,然后开始 使用
qa
录制宏。 使用
llll
向右移动,使用进入插入模式
a
,放下双引号,退出插入模式,然后返回到 使用
(或等效项)的行。按
j
向下移动一行。 使用
q
停止录制。 然后用
@a
重播宏。好几次



上述任何一种方法对您有效吗?

我不确定vim正在做什么,但这是一个有趣的效果。描述所需内容的方式听起来更像宏的工作方式(
:help macro
)。类似这样的操作可以对宏执行您想要的操作(从正常模式开始):

  • qa
    :将宏记录到
    a
    寄存器
  • 0w
    0
    转到行的开头,
    w
    跳转一个单词
  • i“
    :进入插入模式,插入一个
    ,然后返回正常模式
  • 2e
    :跳到第二个单词的末尾
  • a“
    :追加一个
  • jq
    移动到下一行并结束宏录制
  • 综合起来:
    qa0wi“2ea”

    现在您可以使用
    @a
    执行宏,使用
    @
    重复上一个宏。要应用于文件的其余部分,请执行类似于
    99@a
    假设您的行数不超过99行,宏执行将在到达文件末尾时结束

    以下是如何使用
    可视块模式
    (从正常模式开始)实现所需的功能:

  • 导航到您希望第一个报价的位置
  • 进入
    visual block mode
    ,选择要影响的行,
    G
    转到文件底部
  • 点击
    I“
  • 移动到要插入
    的下一个位置
  • 您想重复刚才所做的,这样一个简单的
    就足够了

  • 帮自己一个忙,去掉Windows兼容层

    进入可视块模式的正常快捷方式是

    其他人处理过录制宏,以下是一些其他想法:

    仅使用可视块模式。

  • 将光标放在第二个单词上:

    asd |a|sd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    
    asd |a|sd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    
  • 点击
    进入视觉块模式并向底部展开选择:

    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    
  • 点击
    I“
    获取:

    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    
  • 将光标放在第三个单词的最后一个字符上:

    asd "asd as|d| asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    
  • 点击
    进入视觉块模式并向底部展开选择:

    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    
  • 点击
    A“
    可获得:

    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    
  • 具有可视块模式和。

  • 将光标放在第二个单词上:

    asd |a|sd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    
    asd |a|sd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    
  • 点击
    进入视觉块模式,并向底部和右侧展开您的选择:

    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    
  • 点击
    S“
    以将您的选择包围起来:

  • 带可视线路模式和
    :正常

  • 点击
    V
    选择整行并向下展开:

    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    

  • 执行以下命令:
    :“以上给出了一些很好的现成解决方案,但我们也可以尝试一些提供多个游标的插件,如Sublime

    我认为这一点很有希望:

    它似乎被抛弃了一段时间,但在2014年有所贡献

    它非常强大,尽管我花了一点时间来适应这个流程(它非常崇高,但仍然像Vim一样模态)

    根据我的经验,如果你安装了很多其他插件,你可能会遇到一些冲突

    此功能还有其他一些尝试:

    • (仅搜索替换,但使用实时预览)
    • (基于上一步)
    如果您注意到其中任何一项正在改进,请随时进行编辑。

    Ctrl-v。。。。。。。。。。。。。。。。启动视觉块选择
    
    Ctrl-v ................ start visual block selection
    6j .................... go down 6 lines
    I" .................... inserts " at the beginning
    <Esc><Esc> ............ finishes start
    2fdl. ................. second 'd' l (goes right) . (repeats insertion)
    
    6j。。。。。。。。。。。。。。。。。。。。下6行 I.在开头插入 ............ 完成开始 2fdl。。。。。。。。。。。。。。。。。第二个“d”l(向右)。(重复插入)
    我的解决方案是使用以下两种映射:

    map <leader>n <Esc><Esc>0qq
    map <leader>m q:'<,'>-1normal!@q<CR><Down>
    

    尽管这会使你无法进行另一次编辑。您必须重新选择您的线路。

    无需99@a. 如果要在文件的每一行执行宏,请尝试:%norm@a、 没有点(它们只是句子的结尾,不是命令的一部分)
    9999@a
    可能很难看,但它比
    更容易键入:%norm@一个
    ,它不会在您刚刚编辑的行上重新运行。很高兴认识我