Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VIM中的行选择_Vim - Fatal编程技术网

VIM中的行选择

VIM中的行选择,vim,Vim,如何选择VIM中不包含单词“hello”的所有行?我需要把它拉出来,然后保存到一个文件中。我怎么做?我正在寻找类似于: :v/!(你好)>文件 如果系统上有grep,则可以使用以下命令: :!grep -v hello % > file 我通常会用一些不同的 :g/hello/d i、 删除所有包含“hello”的内容,然后选择、猛拉或任何需要执行的操作,最后返回到u。 我发现这比构建命令行管道更省心。选择并写入新文件: :g/hello/ . w!>> file 在V

如何选择VIM中不包含单词“hello”的所有行?我需要把它拉出来,然后保存到一个文件中。我怎么做?我正在寻找类似于:

:v/!(你好)>文件


如果系统上有
grep
,则可以使用以下命令:

:!grep -v hello % > file

我通常会用一些不同的

:g/hello/d
i、 删除所有包含“hello”的内容,然后选择、猛拉或任何需要执行的操作,最后返回到u。
我发现这比构建命令行管道更省心。

选择并写入新文件:

:g/hello/ . w!>> file 
在Vim命令之后

:let @a='' | g!/hello/normal "Ayy
您将在寄存器“a”中拥有所有没有“hello”的行。您可以使用“ap normal”命令粘贴其值,也可以使用

:let @*=@a
然后,您可以在Windows上使用“Ctrl+V”,在Mac Os上使用“Cmd+V”,或者在Linux上使用“鼠标中键单击”来粘贴文本

魔法简介:

@a是绑定到“a”寄存器中存储的值的Vim变量。
“ap“bp”cp。。Vim正常模式下的按键组合是否超过特定寄存器中的值。
@*是绑定到系统剪贴板的Vim变量。
让@*=@a将寄存器“a”中的值放入系统剪贴板。

将其添加到.vimrc或使用插件目录创建文件

function s:copy_unmathced_lines(pattern)
   let result_lines = []

   for line in getline(1, '$')
      if line !~ a:pattern
         call add(result_lines, line)
      endif
   endfor

   let @* = join(result_lines, "\n")
endfunction

command -nargs=1 CopyUnmatchedLines call s:copy_unmathced_lines(<q-args>)
然后只需在任何编辑器中使用“粘贴”命令

:g!/hello/ yank A
这些行现在存储在寄存器a中,以便将它们粘贴到“ap”中

编辑: 可以缩写为

:g!/hello/y A
对于那些对这对vim意味着什么感兴趣的人:

:g=全局搜索
!=后面的布尔测试的否定
/hello/=匹配“hello”的正则表达式
y=在每个匹配行上执行的命令,在本例中为“yank”

A=寄存器参数到“yank”命令。在本例中,寄存器“A”以大写形式表示附加到寄存器,而不是替换。

到目前为止,我没有看到提到的另一种方法是重定向

所以对于你的情况,这将是

:redir > file
:g!/hello/
:redir END
另见

:help redir
:help verbosefile

女性生殖器切割的答案就在那里

:v将选择不匹配的行

因此,下面将把不包含“hello”的行附加到名为eee的文件中,并在需要时创建它

:v/hello/ . w!>>eee

Blixtor代码片段的一个实际示例:用“:verbosefile”向好友发送电子邮件

I.打开手册“:e/tmp/new_file”和“:h verbosefile”,然后复制cat blixtor的提示:

:redir > /tmp/verbosefile_instructions
:g/verbosefile/
:redir END
二、 确认您遵守有关电子邮件长度的标准规则,并发出标准问候语:

:match ErrorMsg /\%>73v.\+/
:so /bin/greetings.vim

三、 将文件与Mutt一起发送。

有关视觉选择和复制的示例:假设要分离零件:

  • 目视选择它并按“:”

  • 然后使用命令:


    :“非常直截了当

    :v/hello/ |redir >> file
    

    +1-但您需要将该g/切换到v/以选择所有不包含hello“%”的行。对于grep,它不是特殊字符,对于vim命令行,它是特殊字符,请参阅:help cmdline specially您的答案似乎没有回答问题的其余部分:“>file”“。让我们以悬赏的方式重新评估回复。我对控制缓冲区的方式特别感兴趣:保存、编辑并最终重定向到文件。这个答案似乎很酷,但不知何故很难理解。”。也许,有人可以在回答中澄清事物在表面之下是如何运作的。像“@a”和“let”这样奇怪的东西是什么?比如,维姆还是别的什么?
    :v/hello/ |redir >> file