【问题标题】:Vim - easily edit filter resultVim - 轻松编辑过滤结果
【发布时间】:2012-06-14 11:24:52
【问题描述】:

我想为 vim 缓冲区使用类似 vils 的东西。

例子:

a
b
a
b

搜索“a”(:g/a/

输出:

a
a

然后像普通缓冲区一样编辑输出。 完成后,它应该将我的更改逐行映射回原始缓冲区。

我该怎么做?

PS:我可能可以使用:%s/../../ 或类似的东西,但它不会像它应该的那样舒服。 (即使 CTRL+F 缓冲区中的完成也可以。)

【问题讨论】:

  • 我想用它来隐藏配置文件中的 cmets。
  • 你最好的选择是继续隐藏没有搜索字符串的行

标签: vim filtering


【解决方案1】:

您所说的功能在 emacs 中听起来像 occure/narrow-to-region

在 vim 中,您可以输入以下命令:

:vimgrep pattern %

然后输入:cw 打开快速修复列表。

您可以使用鼠标单击或:cn/:cp 进行导航以进行更改。

【讨论】:

  • 嗯,这对我不起作用...列表打开,但是当我尝试修改它时,我得到E21: Cannot make changes, 'Modifiable' is off,然后如果我用:set modifiable 覆盖它,更改不会反映在原始文件中。
【解决方案2】:

使用 Qfreplace http://github.com/thinca/vim-qfreplace

  1. 将一些添加到快速修复中。例如:grep foo */
  2. 类型:快速修复上的 Qfreplace
  3. 根据需要换行。
  4. :w

【讨论】:

  • 这正是我想要的。非常感谢!
【解决方案3】:

我通常将这些行复制到文档的末尾

:g/a/t$

如果需要,您可以在文档的“前”结尾处设置标记:

:$mark a

所以,现在您可以像往常一样实际编辑文档的'a,$ 部分,包括将其保存到其他位置:

:'a,$d | new | put!

以下方法也可以:您可以拉动,附加到寄存器a

:g/a/yank A

当然,您可能想在开始之前清除寄存器a:

:let @a=""

【讨论】:

    【解决方案4】:

    只要匹配行跨越单个连续行范围,NrrwRgn plugin 就可以为您工作。

    【讨论】:

      【解决方案5】:

      g/../ 可以与类似的命令结合使用

      :g/^a/ s/a/a.txt/
      

      例如将每个“a”更改为“a.txt”。见 ':h :g'

      【讨论】:

      • 我认为这不是他想要的。我认为他想隐藏一些行,编辑其他行并在保存时保存整个文件,即隐藏的行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2016-03-22
      • 2011-07-23
      相关资源
      最近更新 更多