簡體   English   中英

VIM中的逐行選擇

[英]Linewise Selection in VIM

如何在VIM中選擇所有不包含單詞“ hello”的行? 我需要將其拉出,然后保存到文件中。 我該怎么做? 我正在尋找類似的東西:

:v /!(你好)>文件

:g!/hello/ yank A

這些行現在存儲在寄存器a中,要粘貼它們,請執行“ ap

編輯:可以縮寫為

:g!/hello/y A

對於那些對vim意味着什么感興趣的人:

:g =全局搜索
=否定隨后的布爾測試
/ hello / =匹配“ hello”的正則表達式
y =在每條匹配的行上執行的命令,在這種情況下為“ yank”
A =注冊“ yank”命令的參數。 在這種情況下,寄存器“ a”以大寫形式存在,即追加到寄存器而不是替換。

如果您的系統上有grep ,則可以使用以下命令:

:!grep -v hello % > file

我通常會做一些變化

:g/hello/d

即刪除所有包含“ hello”的內容,然后選擇,拉動或進行任何需要的操作,最后還原到擊中u的位置。 我發現這比在構建命令行管道方面花費更少的精力。

到目前為止,我沒有看到的另一種選擇是redirecton。

所以對於你的情況,這將是

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

也可以看看

:help redir
:help verbosefile

fgm的答案快到了

:v將選擇不匹配的行

因此以下內容將不包含“ hello”的行添加到名為eee的文件中,並在需要時創建它。

:v/hello/ . w!>>eee

很直截了當;

:v/hello/ |redir >> file

選擇並寫入新文件:

:g/hello/ . w!>> file 

一個帶有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發送文件。

有關視覺選擇和復制的示例:假設您要分離零件:

  1. 視覺選擇它,然后按“:”

  2. 然后使用以下命令:

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

錯誤:顏色將被復制到文件中,並且實際上並不能剪切而是粘貼。

在Vim命令之后

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

您將在寄存器“ a”中包含所有沒有“ hello”的行。 您可以使用“ ap normal命令”粘貼其值,或使用以下命令將該值放入系統剪貼板

:let @*=@a

然后,您可以在Windows上使用“ Ctrl + V”,在Mac OS上使用“ Cmd + V”,或者在Linux上使用“鼠標中鍵”粘貼文本。

魔法簡介:

@a是一個Vim變量,綁定到存儲在'a'寄存器中的值。
“ 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

然后只需在任何編輯器中使用粘貼命令即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM