收錄於話題 #Linux 231個
vim 是對 vi 的擴展,文中的很多操作是 vi 通用的
vi 是區分大小寫 的命令的,也就是說 g與G 是不同的命令
在不同模式下,快捷鍵是不一樣的 模式分 一般模式 編輯模式 指令模式
一般模式用於文件內部操作,編輯模式用於輸入編寫等,指令模式用於對文本文件進行操作
常用操作
進入一般模式為開始編輯,或者按 esc 後進入
按鍵效果a,i,r,o,A,I,R,O進入編輯模式h,backspace左移動l,space右移動j下移動k上移動0,移動到行首$移動到行末,1
表示當前行的行尾, 表示當前行的下一行的行尾b按照單詞向前移動 字首e按照單詞向後移動 字尾w按照單詞向後移至次一個字首H移動到屏幕最上 非空白字M移動到屏幕中央 非空白字L移動到屏幕最下 非空白字G移動到文檔最後一行gg移動到文檔第一行v進入光標模式,配合移動鍵選中多行Ctrl+f向下翻頁Ctrl+b向上翻頁u撤銷上一次操作``回到上次編輯的位置dw刪除這個單詞後面的內容dd刪除光標當前行dG刪除光標後的全部文字d$刪除本行光標後面的內容d0刪除本行光標前面的內容y複製當前行,會複製換行符yy複製當前行的內容yyp複製當前行到下一行,此複製不會放到剪切板中nyy複製當前開始的 n 行p,P,.粘貼ddp當前行和下一行互換位置J合併行Ctrl+r重複上一次動作Ctrl+z暫停並退出ZZ保存離開xp交換字符後面的交換到前面~更換當前光標位置的大小寫,並光標移動到本行右一個位置,直到無法移動光標詳細操作按鍵效果Ctrl+e向下滾動Ctrl+b向上翻頁b按照單詞向前移動 字首B按照單詞向前移動 字首 忽略一些標點符號e按照單詞向後移動 字尾E按照單詞向後移動 忽略一些標點符號w按照單詞向後移至次一個字首W按照單詞向後移至次一個字首 忽略一些標點符號H移動到屏幕最上 非空白字M移動到屏幕中央 非空白字L移動到屏幕最下 非空白字G移動到文檔最後一行gg移動到文檔第一行(光標到句尾)光標到局首{光標到段落開頭}光標到段落結尾nG光標下移動到 n 行的首位n$光標移動到 n 行尾部n+光標下移動 n 行n-光標上移動 n 行查找命令指令效果*向下查找同樣光標的字符#向上查找同樣光標的字符/code查找 code 一樣的內容,向後?code查找 code 一樣的內容,向前n查找下一處N查找上一處ma在光標處做一個名叫 a 的標記 可用 26 個標記 (a~z)`a移動到一個標記 ad`a刪除當前位置到標記 a 之間的內容:marks查看所有標記指令模式指令效果:q一般退出:q!退出不保存:wq保存退出:w filename另存為 filename:jumps歷史編輯文檔記錄:set nu設置行號顯示:set nonu取消行號顯示:set顯示設置參數:set autoindent自動縮排,回車與第一個非空格符對齊:syntax on/off根據程序語法高亮顯示:set highlight高亮設置查看:set hlsearch查找代碼高亮顯示:nohlsearch暫時關閉高亮顯示:set nohlsearch永久關閉高亮顯示:set bg=dark設置暗色調:set bg=light設置亮色調屏幕翻滾按鍵效果Ctrl+f向文件尾翻一屏幕Ctrl+b向文件首翻一屏幕Ctrl+d向文件尾翻半屏幕Ctrl+u向文件首翻半屏幕插入命令按鍵效果i在光標前I在當前行首a在光標後A在當前行尾部o在當前行下新開一行O在當前行上新開一行r替換當前字符R替換當前行及後面的字符,直到按 esc 為止s從當前行開始,以輸入的文本替代指定數目的字符S刪除指定數目的行,並以輸入的文本替代ncw,nCW修改指定數目 n 的字符nCC修改指定數目 n 的行刪除命令按鍵效果ndw,nDW刪除光標開始及其後 n-1 個字符dw刪除這個單詞後面的內容dd刪除光標當前行dG刪除光標後的全部文字d$刪除本行光標後面的內容d0刪除本行光標前面的內容ndd刪除當前行,以及其後的 n-1 行x刪除一個字符,光標後X刪除一個字符,光標前Ctrl+u刪除輸入模式下的輸入的文本多窗口模式指令效果:split創建新窗口Ctrl+w切換窗口Ctrl-w =所有窗口一樣高Ctrl-w + 方向鍵多窗口視圖切換多文件編輯指令效果:args列出當前編輯的文件名:next打開多文件,使用 n(Next) p(revious):file列出當前打開的所有文件vim 自定義技巧複製粘貼取消縮進:set paste進入 paste 模式以後,可以在插入模式下粘貼內容,不會有任何變形 這個參數做了這麼多事:
textwidth設置為0 wrapmargin設置為0 set noai set nosi softtabstop設置為0 revins重置 ruler重置 showmatch重置 formatoptions使用空值下面的選項值不變,但卻被禁用
lisp indentexpr cindent綁定快捷鍵來激活 / 取消 paste 模式
:set pastetoggle=<F11>出現粘貼換行符錯位,設置一下 .vimrc
" this can change way of paste words :set paste " default tabstop=8 :set tabstop=4 " use keyboard F11 to change paste mode :set pastetoggle=<F11> vim 縮進Normal Mode 下,命令>>將對當前行增加縮進,而命令<<則將對當前行減少縮進 在命令前使用數字,來指定命令作用的範圍
5<<在 Insert/Replace Mode 下
使用0-Ctrl-Shift-d命令,將移除所有縮進需要注意的是,當我們輸入命令中的 「0」 時,Vim 會認為我們要在文本中插入一個 0,並在屏幕上顯示輸入的「0」;然後當我們執行命令 0-Ctrl-Shift-d 時,Vim 就會意識到我們要做的是減少縮進,這時 0 會就會從屏幕上消失
vim tab 縮進tab 縮進寬度默認為 8 個空格
我們可以使用以下命令,來修改縮進寬度
:set tabstop=4 :set softtabstop=4 :set shiftwidth=4 :set expandtabtabstop: 表示一個 tab 顯示出來是多少個空格的長度默認 8
softtabstop: 表示在編輯模式的時候按退格鍵的時候退回縮進的長度當使用 expandtab 時特別有用。
shiftwidth: 表示每一級縮進的長度一般設置成跟 softtabstop 一樣。當設置成 expandtab 時縮進用空格來表示noexpandtab 則是用制表符表示一個縮進
expandtab 選項,用來控制是否將 Tab 轉換為空格, 但是這個選項並不會改變已經存在的文本,如果需要應用此設置將所有 Tab 轉換為空格,需要執行
:retab! vim 自動縮進:set cindentvim 可以很好的識別出 C 和 Java 等結構化程序設計語言,並且能用 C 語言的縮進格式來處理程序的縮進結構
:set smartindent在這種縮進模式中,每一行都和前一行有相同的縮進量,同時這種縮進形式能正確的識別出花括號,當遇到右花括號(}),則取消縮進形式。此外還增加了識別 C 語言關鍵字的功能。如果一行是以 #開頭的,那麼這種格式將會被特殊對待而不採用縮進格式。
:set autoindent在這種縮進形式中,新增加的行和前一行使用相同的縮進形式
顯示隱藏符號" normal is :set nolist | show hide is :set invlist :set nolist 使用 vim 寄存器使用 vim 寄存器 「+p 粘貼
根本不用考慮是否自動縮進,是否 paste 模式,直接原文傳遞
如果想保存原寄存器中內容而同時增加新的內容,就要在 yy 前增加標籤 標籤以雙引號開始,跟著的是標籤名稱,可以是數字 0-9,也可以是 26 個字母
顯示所有寄存器內容
:reg注意兩個特殊的寄存器:* 和 +
這兩個寄存器是和系統相通的,前者關聯繫統選擇緩衝區,後者關聯繫統剪切板 通過它們可以和其他程序進行數據交換
若寄存器列表裡無 * 或 + 寄存器,則可能是由於沒有安裝 vim 的圖形界面所致 sudo apt-get install vim-gnome
設置 vim 永遠顯示行號修改 vim 的配置文件加入 set nu
vi ~/.vimrc然後輸入
set nu當然也可以輸入其他配置類似
set nonu syntax on vimrc 常用配置設置行號set nu設置自動縮進set autoindent設置tab佔n個字符set tabstop=n設置以空格代替tab(因為有部分場合不允許使用tab)set expandtab設置縮進字符數為nset shiftwidth=n設置自動語法高亮syntax on