[英]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發送文件。
有關視覺選擇和復制的示例:假設您要分離零件:
視覺選擇它,然后按“:”
然后使用以下命令:
:'<,'>! > ../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.