Vim方式在多行上划出文本对象

时间:2016-12-14 18:13:15

标签: vim

假设我有

- 'autoindent' is set by default
- 'autoread' is set by default
- 'backspace' defaults to "indent,eol,start"
- 'backupdir' defaults to .,~/.local/share/nvim/backup (|xdg|)
- 'complete' doesn't include "i"
- 'directory' defaults to ~/.local/share/nvim/swap// (|xdg|), auto-created

我如何用视觉块(假设)将单词autoindent autoread backspace...等用于系统注册

P.S。尝试了vim-multiple-cursors,但是插件buggy(而不是vim方式)并且如果一个退出多游标模式,则不允许复制粘贴。

Great answers too in russian version

4 个答案:

答案 0 :(得分:6)

一种方法

:%norm f'"Zya'

会将'autoindent' 'autoread' 'backspace' 'backupdir' 'complete' 'directory'放入注册z

method 1

要在Vim之外使用,您可以这样做:

:let @+ = @z

另一个具有相同结果但更复杂的(仅为了它的乐趣)

/'\w\{-}' <CR>
"Zca'
<C-r><C-o>"<Esc>
n.n.n.n.n.

method 2

加成

清除命名寄存器(寄存器z,这里)的最快方法是:

qzq

答案 1 :(得分:1)

为了使其发挥作用:

  1. 清空注册a:输入
  2. 正常模式下

    qaq

    1. 在命令行执行:

      :%s/^- '\(\w\+\)'/\=setreg('A',submatch(1),'V')/n

    2. 将所需的输出复制到注册表a中,您可以通过输入命令行来获取它:

    3. :put A

答案 2 :(得分:1)

没有视觉阻止的解决方案:

:let @+='' - 清除系统寄存器

qa - 记录以注册&#39; a&#39;

^3l"kyej - 进入第四栏,抓住这个词来注册&#39; k&#39;并转到下一行

:let @+=@+ . ' ' . @k - 连接系统寄存器,&#39; &#39;并注册&#39; k&#39;并将结果再次存储在系统寄存器

q - 停止录制

5@a - 重复录制的命令5次 - 瞧

reg + - 显示"+ autoindent autoread backspace backupdir complete

答案 3 :(得分:1)

我的ExtractMatches plugin(以及其他)有:YankMatches命令。它的工作方式类似于内置:substitute

:YankMatches!/'\zs[^']\+\ze'/+

默认情况下,该命令用换行符分隔元素;如果您希望它们以空格分隔,请使用以下变体:

:YankMatches!/'\zs[^']\+\ze'/& /+