2009-04-21 41 views

回答

11
:g!/hello/ yank A 

的行存储在寄存器中,粘贴他们做“AP

编辑: 可以缩写为

:g!/hello/y A 

对于那些有兴趣这意味着什么VIM:

:g =全局搜索
!=否定布尔测试
/hello/=匹配“hello”的正则表达式
y =对每个匹配行执行的命令,在本例中为“yank”
A =向“yank”命令的register参数。在这种情况下,注册'a',但以大写字母的形式表示追加到寄存器而不是替换。

9

只要你在系统上有grep,你可以使用这个命令:

:!grep -v hello % > file 
+0

“%”不是grep的特殊字符,它是vim的命令行特殊字符,请参阅:帮助CMDLINE特 – user55400 2009-04-21 13:49:01

5

我通常做这个用的

:g/hello/d 

一些变化即删除包含“hello”的所有内容,然后选择,抽出或需要做的任何事情,最后还原为你。 我觉得这不是精神上的征税,然后建立命令行管道。

+0

这是更短的命令比我同样的问题。 – 2009-08-03 03:50:47

1

选择并写入新文件:

:g/hello/ . w!>> file 
+0

+1 - 但你需要切换g /到v /来选择所有不包含你好的线 – rampion 2009-04-21 11:51:38

+2

这是什么。意思? – 2009-04-21 13:29:47

0

后Vim命令

:let @a='' | g!/hello/normal "Ayy 

您将有所有不寄存器 'A' 有 '你好' 的线。你可以粘贴它的价值与“AP正常的命令或者把这个价值系统剪贴板

:let @*[email protected] 

而且可以运行在Mac Os或“鼠标使用再按下‘Ctrl + V’(Windows)或‘Cmd + V键’点击”在Linux上粘贴文本

神奇简介:

@a存储在绑定到值一个Vim变量。‘一’注册
“ ap,“bp,”cp,..是在Vim正常模式下从特定寄存器中过去值的关键组合。
@ *是绑定到系统剪贴板的Vim变量。
let @ * = @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>) 

使用情况很简单:

CopyUnmatchedLines hello 

,然后只需在任何编辑器中使用粘贴命令。现在

+0

这个答案似乎很酷,但不知何故难以理解。也许,有人可以在答复中澄清事情如何在表面下发挥作用。什么是奇怪的事情,如“@a”和“让”? Ex,vim或其他什么? – 2009-07-30 00:42:01

6

另一个我没有看到提到的是redirecton。

因此,对于你的情况,这将是

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

又见

:help redir 
:help verbosefile 
4

FGM的回答几乎有

:v将选择不匹配

这么线下面的代码将不包含“hello”的行添加到名为eee的文件中,创建i如果需要的话。

:v/hello/ . w!>>eee 
0

与Blixtor的片段一个实际的例子:电子邮件朋友丢失 “:verbosefile”。

一打开手册 “:E/TMP/NEW_FILE” 和 “:H verbosefile”,然后让我们复制猫blixtor的提示:

:redir > /tmp/verbosefile_instructions 
:g/verbosefile/ 
:redir END 

II。确认您遵循有关您的电子邮件的标准规则,并提供标准问候:

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

三。用Mutt发送文件。

0

例关于视觉的选择和复制:假设你要分开的一部分:

  1. 视觉选择它,然后按 “:”

  2. 然后使用命令:

    :'<,'>! > ../new_file_in_a_subdirectory

错误:颜色将被复制到该文件,它实际上没有应对宁愿减少和粘贴。

1

非常简单;

:v/hello/ |redir >> file