2009-04-21 42 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