RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 603697
Accepted
srghma
srghma
Asked:2020-12-15 03:30:18 +0000 UTC2020-12-15 03:30:18 +0000 UTC 2020-12-15 03:30:18 +0000 UTC

如何在 vim 中复制多行文本对象

  • 772

假设有文字

- '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...系统寄存器?

附言 尝试过 vim-multiple-cursors,但这个插件有问题,只有在不退出多光标模式时才允许复制粘贴

vim
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    cronfy
    2020-12-15T04:29:01Z2020-12-15T04:29:01Z

    复制多行

    1. 我们移动到第一行。
    2. V
    3. 将光标移动到最后一行。
    4. y

    缓冲区中的文本。您可以使用插入P。

    复制并粘贴矩形块

    1. 我们移动到左上角。
    2. Ctrl-v(在 Windows 上Ctrl-q)。
    3. 将光标移动到右下角。
    4. y

    缓冲区中的文本。有两个插入选项:

    1. 没有新行 - 文本将插入到光标所在的列中,将现有文本移动到右侧 - 命令P。
    2. 从缓冲区命令为文本创建新行:put。

    将多次出现的与正则表达式匹配的文本复制到一个缓冲区中

    如果需要复制不是矩形的东西,可以通过正则表达式使用 copy to case。

    1. qaq- 清除寄存器“a”。
    2. :%s/\v^- '([^']*)'/\=setreg('A', submatch(1), 'V')/n(对于您的具体情况,这里会发生什么 - 请参阅下面的解释)。

    “a”情况下的文本。您可以使用插入P。在您的情况下,结果如下:

    autoindent
    autoread
    backspace
    backupdir
    complete
    directory
    

    定期发生的事情:

    • \v - 打开“very magic”模式,这样扩展的正则表达式就可以工作了(在我们的例子中,需要括号)。
    • 要缓冲的部分用括号括起来。
    • setreg()withsubmatch(1)获取括号中出现的值并将其添加到大小写“a”(注意大小写是大写的,以便添加文本,而不是替换现有文本)。
    • /n - 指示 s/// 不要替换文本。

    更多选择在这里。

    手动将部分文本键入缓冲区

    如果无法使用正则表达式收集文本,您可以手动将其输入缓冲区:

    1. qaq- 清除寄存器“a”。
    2. 突出显示所需的文本。例如,在我们按下的“自动缩进”一词上vi',这样的命令字面意思是“选择单引号内的单词”。
    3. "Ay- 将选定的文本复制到“a”寄存器,添加到缓冲区,而不是覆盖它。
    4. 根据需要多次重复步骤 2-3。

    缓冲区中的文本。您可以使用插入P。

    不同方法的组合

    实际上,如果您在每次新搜索之前不键入qaq,则不会清除寄存器。您可以先手动将数据输入其中,然后使用常规程序,然后以某种方式,然后再次手动输入,等等。

    • 1
  2. aleksandr barakin
    2020-12-15T04:57:41Z2020-12-15T04:57:41Z

    条件“获取第一和第二引号之间的文本”很容易用程序完成cut:

    $ echo "- 'autoindent' is set by default" | cut -d "'" -f 2
    autoindent
    

    更长的路

    在vim中,您可以使用以下构造将当前选定的行传递给外部程序(我们将使用它cut):

    :диапазон! внешняя-программа-или-команда
    

    即,通过按 转到它V,然后在vim!命令行中按 和 ,在可视模式下选择您需要的行- 您会得到以下文本:

    :'<,'>!
    

    在它之后,输入一个外部命令,使它看起来像这样:

    :'<,'>! cut -d "'" -f 2
    

    按enter,而不是所有选定的行,您只会得到第一引号和第二引号之间的单词:

    autoindent
    autoread
    backspace
    backupdir
    complete
    directory
    

    按gv重复选择相同范围的行,然后y将它们保存在寄存器中(默认情况下,在未命名的情况下")。

    要返回之后各行的原始内容,请按u。


    如果您需要处理的不是一系列行,而是文件的所有行,那么整个过程会稍微短一些。运行命令:

    :%! cut -d "'" -f 2
    

    然后将所有结果行复制到寄存器(默认情况下,到未命名的):

    :%y
    

    然后按 返回原始行u。


    更短的路

    1. 将您需要的行复制到未命名的寄存器(即选择它们并按y)。
    2. cut使用函数调用程序system(),将未命名寄存器 ( @") 的内容传递给它,并将其输出写回同一寄存器:

      :let @"=system("cut -d \"'\" -f 2",@")
      

      程序参数中的引号cut必须反斜杠。

    3. 未命名寄存器现在包含搜索字符串。您可以将它们粘贴到正确的位置,例如,单击p。

    当然,您可以使用任何其他寄存器。保存字符串以注册a: "ay. a在命令行上注册寻址:(@a而不是@")。从寄存器插入a:"ap。

    • 1
  3. srghma
    2020-12-16T05:19:56Z2020-12-16T05:19:56Z

    决定改用 Vintageous。我的配置在这里

    还连接了 MarkAndMove、AceJump 和 Surround。

    只需看一下 MarkAndMove 是什么并欣赏它的潜力。它比 vim 好得多

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5