運維乾貨 | 12 個實用的 Vim 使用技巧
1
重複上一條 Ex 命令
在 Vim 中有 3 種命令列模式提示:
· Ex 命令提示符::something
· 查詢提示符 Search prompt:/something
· 表示式提示符 Expression prompt:(在插入模式下輸入 <C-r>= ): =1+1<cr>
假如我們從 Ex 命令提示符中執行一個 spec:
1 :!rspec spec/models/code_spec.rb
我們可以通過在普通模式下輸入 @: 來重複上一條 Ex 命令。
2
在 CSS 中對屬性進行排序
如果我們需要按照字母表順序對 CSS 選擇器中的行進行排序,只需在可視模式下選擇選中的行並輸入 :sort,然後就可以對它們進行排序。
12 h4 { font-size: 11px; margin: 15px; background: red;}
3
選擇複製和貼上的文字
我們可以使用 gv 來選擇原始的需要複製的文字,使用 gb 選擇上一次貼上的文字。gb 是一個自定義的對映,可將其新增到 vimrc 檔案,而且該命令在進行提取方法重構、剪下時十分有用。我們還需要修復縮排,使用 gb 可以輕易選擇貼上的文字,然後使用 < 或 > 來進行修復。
1 " select last paste in visual modennoremap <expr> gb '`[' . strpart(getregtype(), 0, 1) . '`]'
4
在插入模式下貼上文字
假如處於插入模式中,並希望在不退出插入模式的情況下貼上已複製的文字。可通過使用 <C-r>0 實現這個需求。如果複製的文字包含新的行字元,<C-r><C-p>0 會處理縮排的問題。
5
在插入模式下刪除
如果需要在插入模式、Vim 命令列模式或 Shell 命令列中刪除字元、單詞或行,有以下的快捷方式:
1 <C-h> " delete back one character (backspace)<C-w> " delete back one word<C-u> " delete back to start of line<C-k> " delete forward to end of line
6
在某個範圍內執行普通模式命令
下面的 JavaScript 程式碼全都忘記加上 ; 分號了:
1 var element = $(this)var tabName = element.data('tab')var report = element.data('report')
我們可以選擇全部三行程式碼,然後執行命令 :normal A;,它將為每行執行 A; (追加 ;)的命令。或者,我們可以在檔案的整個內容上使用 :%normal A; 以達到相同的效果。
7
在多行程式碼中重複上一次更改
如果我們在上述程式碼段的第一行進行了一次修改,使用 A; 在行的結尾處插入 ;,如果需要再為 2-3 行新增 ;,應該怎樣操作?可以通過選擇第 2-3 行,並通過在視覺化模式下使用 dot (“.”) 命令 :'<,'> normal . 來重複該命令。
8
在多個檔案中進行替換操作
Vim 中,在多個檔案裡面不能直接進行替換操作。要在多個檔案中進行查詢和替換,首先需要建立一個檔案列表,我們將在其中執行一條命令。通過使用 :args 命令來實現這個需求。例如,載入所有以"ext"字串開頭的 JavaScript 檔案:
1 :args app/assets/javascripts/ext*.js
這樣可以看到通過執行 :args 命令得到的引數列表載入的檔案。準備好引數列表後,可以執行查詢和替換操作:
1 :argdo %s/From/To/g
一旦在檔案中進行了更改,我們可以使用以下命令儲存引數列表中所有的檔案:
1 :argdo update
9
在多個檔案中進行查詢和替換
如果我們知道被操作的檔案需要在哪裡執行替換命令,那麼上一個技巧可以正常工作。但是大多數時候,我們需要搜尋檔案中的文字,然後只在這些檔案中執行替換命令。此時,我們可以通過使用 vimgrep 命令在檔案查詢匹配。vimgrep 命令可建立快速列表,其中包含與模式匹配的檔案,該列表可通過 :copen 命令來開啟檢視。如果我們希望快速列表有用,需要使用 vimrc 檔案中的 :Qargs 對映來將其轉換為引數列表:
12345678 command! -nargs=0 -bar Qargs execute 'args' QuickfixFilenames()" populate the argument list with each of the files named in the quickfix listfunction! QuickfixFilenames()let buffer_numbers = {}for quickfix_item in getqflist()let buffer_numbers[quickfix_item['bufnr']] = bufname(quickfix_item['bufnr'])endforreturn join(map(values(buffer_numbers), 'fnameescape(v:val)'))endfunction
最後,這裡有一個需要在檔案執行查詢和替換的例子:
1 :vimgrep /CurrencyNumberHelper/ app/models/*.rb:Qargs:argdo %s/CurrencyNumberHelper/CurrencyHelper/g:argdo update
在評論中,buztard 提到一個更簡單的方法是使用 ack-grep 來建立引數:
1 :args `ack-grep -l CurrencyNumberHelper`# or, if you're using Ack plugin, then just :Ack CurrencyNumberHelper:argdo %s/CurrencyNumberHelper/CurrencyHelper/g:argdo update
Thiago A. 也在評論中提到,如果你使用較新的 Vim 版本,這將會更簡單,可簡單地使用 cdo 和 cfdo 來完成這個需求:
1 :Ack CurrencyNumberHelper:cfdo s/CurrencyNumberHelper/CurrencyHelper/g | update
10
編輯已錄製的巨集
在錄製巨集的時候,很容易犯錯誤。當發生這種情況時,編輯已經錄製好的巨集比重新錄製更容易。
假設我們已經在暫存器 a 中錄製了新的巨集。可以使用 :put a 在當前的緩衝區中列印巨集的內容,並在 Vim 中對巨集進行編輯。一旦巨集被修改,我們可以選擇它然後使用 "ay 將它複製到暫存器。這樣,我們就可以使用 @a 從暫存器中執行新的巨集。
11
在多個檔案中執行巨集
我們已經錄製好了一個巨集,並且希望在多個檔案中執行它。首先我們需要使用檔案構建一個引數列表,例如,從一個 Rails 應用中載入所有模型:
1 :args app/models/*.rb
然後使用下面的命令執行巨集(記錄在暫存器 a 中):
1 :argdo normal @a
最後,使用下面的命令儲存所有的緩衝:
1 :argdo update
12
命令列中的 Vi 模式
Bash shell 提供了兩種模式用於命令列編輯:emacs 和 vi。預設情況下是 Emacs 編輯模式,可以使用以下方式將其更改為 vi 模式:
1 set -o vi
在命令列中,可以按下 ESC 鍵進入 vi 編輯模式,並使用 vi 的單行編輯功能。在命令列中的 vi 編輯模式下,可以通過按下 v 彈出編輯器,這樣就可以編輯和儲存將在命令列中執行的緩衝。
如果需要回到 emacs 模式,輸入:
1 set -o emacs
這裡有一份在 bash shell 的 vi 模式下可以執行哪些 Vi 命令的速查表 —— http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.txt。
來自:https://dalibornasevic.com/
11月雲端計算免費課程火爆來襲,免費深入瞭解雲端計算技術,揭祕運維行業發展,與技術大牛面對面交流,幫你尋找屬於你的努力方向~~
☟
11月雲端計算免費訓練營
時間:
11月23日 - 11月29日 (為期5天,24/25日休息,11月30日正式開班)
課程內容:
什麼是Linux、雲端計算、虛擬化;
KVM虛擬化實戰;
Linux作業系統由來;
企業級Linux伺服器安裝方案;
破解Linux系統密碼;
Linux命令列格式;
Linux下目錄和檔案管理;
FTP伺服器演示;
Web伺服器演示;
DNS伺服器演示;
初識網路工程;
Linux雲端計算行業發展前景等等。
地點:達內全國各中心校區,就近選擇。
講師:行業大咖,技術大牛面授課程。
免費報名方式:長按下方二維碼即可免費申請▼
*本次免費訓練營異常火爆,座位有限,各位童鞋抓緊時間,先報先得。
PS:記得查收小編送你的免費大禮包呦~
福利 | 一萬多套PPT模板等你免費來拿!無條件領取!
免費送 | 1000多套簡歷模板免費拿,附贈簡歷製作教程!
免費領 | 《Shell指令碼 100例》電子書免費拿,運維必備乾貨~
▼▼點選【閱讀原文】,5天運維免費課程,開講在即!
相關文章
- 乾貨技巧|關於Redis的16個使用技巧Redis
- 運維工作實用技巧運維
- 只有老運維人才能懂的運維乾貨運維
- 提高 MongoDB 運維效率的實用技巧MongoDB運維
- 【乾貨】Linux運維人員必備的實用工具!Linux運維
- 乾貨技巧,微信小程式推廣運技巧祕籍微信小程式
- 乾貨學起來!分享4個簡單實用的Word技巧,請低調收藏!
- 針對高 級使用者的 Vim 編輯實用技巧
- 乾貨分享:容器 PaaS 新技術架構下的運維實踐架構運維
- 實用技術乾貨!教你用機器學習提高日常安全運維工作中的效率機器學習運維
- .NET 5 ORM 八大實用技巧 乾貨 - SqlSugar ORMORMSqlSugar
- 靈活運用JS開發技巧(66個實用技巧)JS
- 乾貨丨ERP系統的RPA實施技巧
- 【純乾貨】神奇的Ctrl鍵,Linux運維常用快捷鍵!Linux運維
- 乾貨|自媒體創作中,獲取高流量的實用技巧
- 超實用的乾貨分享給大家,提高工作效率的Excel技巧!Excel
- 6個超實用的Sudo命令使用技巧
- 乾貨分享 | 3個Zbrush實用減面工具分享ZBrush
- 運維需要掌握的12個路由知識點運維路由
- vim基本配置與使用技巧
- 如何讓 Vim 成為運維們的神器運維
- 【譯】12個編寫乾淨且可擴充套件的JavaScript技巧套件JavaScript
- Git 12 歲了,為你送上 12 個 Git 的使用技巧!Git
- 介紹五個很實用的IDEA使用技巧Idea
- 乾貨分享:PPT製作技巧
- 乾貨!運維必知的9種高效能技術架構運維架構
- 乾貨:Bitmap 複用時的一個異常
- 安全運維小技巧運維
- 銀彈谷V平臺使用技巧:資料庫使用的三個實用技巧資料庫
- 最強幹貨:資料庫設計的14 個實用技巧資料庫
- Git 12 歲了,送給你 12 個 Git 使用技巧Git
- 幾個優雅的JavaScript運算子使用技巧JavaScript
- 分享實用乾貨:辦公必備的6個軟體,大神都在用!
- 頂級實用乾貨——談談Java中的volatileJava
- VIM操作技巧
- 運維必收乾貨 | Linux關機命令和重啟命令有哪些?運維Linux
- 從理論到案例,請收下這篇Nginx監控運維乾貨Nginx運維
- 推薦給“懶惰” Linux 運維工程師的 10 個關鍵技巧,瞬間提升運維效率!Linux運維工程師