1.簡介
vim 是 Linux 操作系統中最通用的全屏幕文本編輯器,是 vi 的增強版(vi iMproved),與 vi 完全兼容,且擴充了很多功能。
vim 編輯器支持編輯模式和命令模式,編輯模式下可以完成文本的編輯功能,命令模式下可以完成對文件的操作命令,要正確使用 vim 編輯器就必須熟練掌握這兩種模式的切換。默認情況下,打開 vim 后自動進入命令模式。從編輯模式切換到命令模式使用 ESC 鍵,從命令模式切換到編輯模式使用 A、a、O、o、I、i 鍵。
2.命令格式
vim [OPTIONS] [FILE.。.] vim [OPTIONS] - vim [OPTIONS] -t TAG vim [OPTIONS] -q [ERRORFILE]
[FILE.。.]表示一系列使用 vim 編輯的文件,使用:next命令可以向前切換所編輯的文件,使用--可以向后切換。這是 vim 常用啟動格式;
-:表示待編輯的文件從標準輸入讀取;
-t TAG:要編輯的文件和光標的初始位置取決于一個標簽,一種 goto 標簽。標簽在標簽文件中查找,與標簽關聯的文件成為當前文件并執行關聯的命令。主要用于 C 程序,在這種情況下 TAG 可以是函數名,其結果是包含該函數的文件成為當前文件,并且光標位于函數的開頭。參見::help tag-commands;
-q [ERRORFILE]:使用 quickFix 模式啟動 vim,文件 ERRORFILE 將被讀取并顯示第一個錯誤。如果 ERRORFILE 省略,則默認為 AztecC.Err(Amiga 系統)或 errors.err(其它系統)。關于 quickFix 模式說明,可以使用:help quickfix查看。
3.選項說明
+NUM 打開文件時光標跳轉到由 NUM 指定的行首 +/PAT 打開文件時光標跳轉到匹配的模式字符串 PAT +, -c CMD 在完成對第一個文件的讀取后,執行給出的指令 -b 以二進制模式打開文件,用于編輯二進制文件和可執行文件 -C 以兼容模式運行 vim,使 vim 的表現更像 vi,即使存在 .vimrc 文件 -d 以 diff 模式打開文件,當多個文件編輯時,顯示文件差異部分 -e 進入 Ex 模式,即進入冒號開頭的末行模式。ex是Unix編輯器 -E 進入增強 Ex 模式,就像執行命令 exim -l 使用 lisp 模式,打開 lisp 和 showmatch -m 取消寫文件功能,重設 write 選項。你仍然可以修改緩沖內容,但是不可以寫入文件 -M 關閉修改功能 -N 非兼容模式運行 vim,這會使 vim 表現的更好,但是可能會存在與 vi 不兼容的情況,即使存在 .vimrc 文件 -n 不使用 swap file,這可能會導致在 vim 意外崩潰的情況下無法恢復未保存的內容 -o [N] 以上下排列方式同時打開 N 個 vim 窗口,如果未指定 N ,則為每一個文件單獨打開一個窗口 -O [N]
以左右下排列方式同時打開 N 個 vim 窗口,如果未指定 N ,則為每一個文件單獨打開一個窗口 -R 以只讀方式打開文件 -r 列出 swap file -r FILE 以指定的交換文件來恢復崩潰的編輯會話。交換文件名后綴為.swp -s 安靜模式,與 -e 選項結合使用 -u VIMRC 使用指定的 vimrc 文件中的命令來初始化 vim,所有其它的初始化操作將被跳過。可以給定“NONE”來跳過所有的初始化 -U GVIMRC 使用指定的 gvimrc 文件中的命令來初始化 GUI,所有其它的 GUI 初始化操作將被跳過。可以給定 “NONE” 來跳過所有的 GUI 初始化 -V [N] 以冗余模式執行 vim,打印 vim 讀取了哪些配置文件 vimrc。可選的數字 N 表示冗余級別,數值越大級別越高,取值范圍是 0~10,默認是 10 -x 寫文件時進行加密,會提示輸入加密密鑰 -h, --help 顯示幫助信息并退出 --version 顯示版本信息并退出
4.內置命令說明
vim 提供了豐富的內置命令,有些內置命令使用鍵盤組合鍵即可完成,有些內置命令則需要以冒號 : 開頭輸入。常用內置命令如下:
Ctrl+u:向下滾動半屏 Ctrl+d:向上滾動半屏 Ctrl+f:向下滾動一屏 Ctrl+b:向上滾動一屏 Ctrl+e:向下滾動一行 Ctrl+y:向上滾動一行 Enter:回車向下滾動一行 Esc:從編輯模式切換到命令模式 ZZ:命令模式下保存當前文件所做的修改后退出 vim :[行號]:光標跳轉到指定行的行首 :$:光標跳轉到最后一行的行首 gg:跳轉到首行; G:跳轉到尾行 Ctrl+g:顯示總行數 x, X:刪除一個字符或選中的內容。當刪除一個字符時,x 刪除光標后的,X 刪除光標前的。刪除即剪切 d:刪除選中的文本,刪除即剪切 D:刪除從當前光標到光標所在行尾的全部字符。刪除即剪切 dd:刪除光標所在行的整行內容。刪除即剪切 ndd:刪除當前行及其后n-1行,n為一個數字。刪除即剪切 y:復制選中的文本 y0:復制光標前一個字符到行首的內容 y$:復制光標后一個字符到行尾的內容 yh:復制光標前的1個字符 yl:復制光標后的1個字符 nyh:復制光標前的n個字符,比如4yh復制光標前的4個字符 nyl:復制光標后的n個字符,比如4yl復制光標后的4個字符 yy:復制光標所在的當前行 nyy:復制當前行以及其后n-1行,n為一個數字; p:小寫p,粘貼文本操作,用于將緩存區的內容粘貼到當前光標所在位置的下方 P:大寫P,粘貼文本操作,用于將緩存區的內容粘貼到當前光標所在位置的上方; /[字符串]:向后搜索,支持正則表達式。用于從當前光標所在位置開始向文件尾部查找指定字符串的內容,查找的字符串會被加亮顯示。鍵入字符 n 跳轉到下一個,N 跳轉到前一個 ?[字符串]:向前搜索,支持正則表達式。用于從當前光標所在位置開始向文件頭部查找指定字符串的內容,查找的字符串會被加亮顯示。鍵入字符 n 跳轉到下一個,N 跳轉到前一個 :a,bs/F/T:替換文本操作,將a到b行之間第一個F換成T字符串。其中,“:s/”表示進行替換操作。不指定a和b,則默認為當前行;如果b為$,表示替換到末行;如果是a,b為%,即:%s/F/T,表示從第一行替換至末行 :a,bs/F/T/g:替換文本操作,替換第a行到b行,每一行所有F為T。a,b的取值規則同上一條; a:在當前字符后添加文本 A:在當前行末添加文本 i:在當前字符前插入文本 I:在當前行首插入文本 no:在當前行后面插入n個空行,n為具體的數值 nO:在當前行前面插入n個空行,n為具體的數值 :wq:執行存盤退出操作 :w:執行存盤操作 :w!:執行強制存盤操作 :q:執行退出操作 :q!:執行強制退出操作 :e [文件名]:打開并編輯指定名稱的文件 :n:如果同時打開多個文件,則繼續編輯下一個文件 :f:顯示當前的文件名、文件總行數、光標所在行號占總行數的比例 :set number:在最左端顯示行號 :set nonumber:在最左端不顯示行號 jkhl或方向鍵:光標移動快捷鍵,分別為上下左右 u:撤銷 ctrl+r:反向撤銷 v+移動光標:使用v進行選擇模式,移動光標可選擇文本 w:word,右移一個單詞,光標停留在單詞首部 e:end,右移一個單詞,光標停留單詞的尾部 b:back,左移一個單詞,光標停留在單詞首部 ^ 或 (:移至行頭 $ 或 ):移至行尾 gd:高亮顯示光標所在的單詞
5.vim 需知
5.1 vim 的四大模式
眾所周知,vim 里面最具特色的東西就是它可以切換模式,那什么是模式呢?可以簡單的理解為在不同的模式下面按相同的鍵而得到不同的效果。比如 vim 在插入模式下面連按兩次 d,那么就會在光標位置插入兩個字母 d,如果在正常模式下面連按兩次 d,那么光標所在當前行將會被刪除。
既然說是 vim 的四大模式,那么 vim 到底有那四大模式呢?
正常模式(normal mode)
可視模式(visual mode)
插入模式(insert mode)
命令行模式(command-line mode)
用戶可以通過按 ESC 在各個模式之間進行切換。關于 vim 的模式說明,可以打開 vim 后鍵入 :help mode 來查看。
正常模式 (command mode)
不管用戶處于何種模式,只要按一下 ESC 鍵,即可進入正常模式。啟動 vim 命令默認情況下進入正常模式。
在正常模式下,用戶可以輸入各種合法的 vim 命令,用于管理自己的文檔。此時從鍵盤上輸入的任何字符都被當做編輯命令來解釋,若輸入的字符是合法的 vim 命令,則 vim 在接受用戶命令之后完成相應的動作。但需注意的是,所輸入的命令并不在屏幕上顯示出來。若輸入的字符不是 vim 的合法命令,vim 會響鈴報警。
可視模式(visual mode)
可視模式簡單來說就是選中一塊編輯區域,然后在上面執行一些操作,比如刪除,替換,改變大小寫等。
在正常模式按下 v(逐個字符選擇文本)、 V(逐行選擇文本)、Ctrl+v(按照塊的方式選擇文本),可以進入可視模式。可視模式中的操作有點像拿鼠標進行操作,選擇文本的時候有一種鼠標選擇的即視感,有時候會很方便。
插入模式 (insert mode)
在正常模式下輸入插入命令 i(insert)、附加命令 a (append)、打開命令 o(open)、修改命令 c(change)、取代命令 r(replace)或替換命令 s(substitute)都可以進入插入模式。在該模式下,用戶輸入的任何字符都被Vi當做文件內容保存起來,并將其顯示在屏幕上。在文本輸入過程中,若想回到命令模式下,鍵入 ESC 鍵即可。
命令行模式 (command-line mode)
命令行模式又稱為 ex 模式。ex 是 EXtended 的簡稱,是 Unix 系統上的純文本編輯器。ex 命令可啟動 vim,執行 ex 命令,并鍵入 visual 就可以進入 vim 的正常模式。
vim 和 ex 編輯器的功能是相同的,二者主要區別是用戶界面。在 vim 中,命令通常是單個鍵,例如 i、a、o 等;而在 ex 中,命令是以按回車鍵結束的行。在正常模式下,用戶按冒號即可進入命令行模式,此時 vim 會在顯示窗口的最后一行顯示一個冒號作為命令行模式的提示符,等待用戶輸入命令。多數文件管理命令都是在此模式下執行的(如把編輯緩沖區的內容寫到文件中等)。命令執行完后,vim 自動回到正常模式。
5.2 vim 相關編碼選項
文件的編碼和顯示是一個令人頭痛的東西,真希望這個世界上只存在utf-8編碼,那就沒那么痛苦了。vim編碼配置涉及4個選項,分別是encoding 、fileencoding、fileencodings和termencoding,四者對應的簡寫分別為enc、fenc、fencs和tenc。
(1)encoding
encoding是vim內部使用編碼。vim運行時,其菜單、標簽、以及各個緩沖區統一使用encoding作為字符編碼。
(2)fileencoding
fileencoding為文件采用的編碼方式。使用vim打開文件后,可以使用末行命令:set fenc=utf-8將文件編碼方式更改為UTF-8,注意,前提是vim打開文件時已經正確識別出文件編碼,即未出現亂碼。
(3)fileencodings
fileencodings用于vim在打開文件的時候進行解碼的猜測列表。文件編碼沒有百分百正確的判斷方法,所以vim只能猜測文件編碼。~/.vimrc里面fileencodings的設置一般為
set fileencodings=utf-8,gb18030,latin1
(4)termencoding
終端所使用的文本編碼。這個選項的值用于告訴VIM終端使用了哪種文本編碼用于文本輸入和顯示。如果該值為空,那么它被設置為encoding的值。
5.3 vim 讀寫文件時編碼轉換過程
(1)讀文件
vim打開文件時,需要將磁盤文件內容載入緩存,并將緩存中的字符轉為換終端編碼,通過網絡傳輸的方式,傳輸到終端進行顯示。兩個轉換環節,有一個出錯都會出現亂碼。
fileencoding -》 encoding -》 termencoding
(2)寫文件
通過終端編輯文件時,字符編碼轉換過程是vim讀文件的逆過程。
termencoding -》 encoding -》 fileencoding
注意:使用vim讀寫文件時為避免出現亂碼,至關重要的一點就是終端,比如SecureCRT或XShell的編碼設置要與vim的termencoding設置相同,如果不同還是還是會出現亂碼,盡管vim已經采用正確的編碼格式解析了文件。比如將XShell設置為UTF-8。
6.vim 常見用法
(1)vim 查看文件編碼
:set fileencoding 或者簡寫 :set fenc
可顯示文件編碼格式。這個命令有致命的缺點。原因是只有正常顯示文件內容時,該命令顯示的文件編碼格式才是文件本身的編碼格式。因為該命令顯示的編碼格式并不是文件本身的編碼格式,而是當前打開該文件所使用的編碼格式。因此,這個命令在網上的說明大都是不準確的,特此說明。
(2)修改編碼類型
使用vim修改:
:set fileencoding=gbk #或者 :set fenc=gbk
使用iconv來修改文件編碼:
iconv -f encoding -t encoding inputfile #比如將一個GBK編碼的文件轉換成UTF-8編碼 iconv -f GBK -t UTF-8 file1 -o file2UTF-8
iconv的參數說明:
-f, --from-code=名稱,原始文本編碼 -t, --to-code=名稱,輸出編碼 -l, --list 列舉所有已知的字符集 -c 從輸出中忽略無效的字符 -o, --output=FILE,輸出文件 -s, --silent,關閉警告 --verbose,打印進度信息
(3)vim 指定編碼類型瀏覽文件
如果知道了文件的編碼類型,可顯示指定編碼類型來解析文件,而不用vim去猜測文件的編碼類型,事實上猜測的往往是錯誤。命令如下:
vim file_name -c “e ++enc=utf-8”
或者在使用 vim 打開文件之后,在末行模式使用如下命令:
:e ++enc=utf-8
(4)vim 新增空白行
新增一行空白,在命令行模式下輸入 o。如果想添加三行的話,鍵入 3o ,如果想添加 n 行則鍵入 n 個 o。如果鍵入 3o 后立即退出插入模式的話,就可以添加三個空白行。如果輸入一些內容再退出,可以添加三行相同的內容。
如果想在每一行執行相同的命令,在 vim 里可以用 :g 實現。一般的語法是:
:g/pattern/cmd
它表示在匹配 /pattern/ 這個正則表達式的行上執行 cmd 命令(也稱冒號命令)。而 /^/ 這個表達式,用于匹配行首。因為任何一行都有行首,你的要求就很容易實現了:
:g/^/norm 3o
norm這個命令的意思是,把后面的參數看成是在普通模式下的按鍵,即命令模式下的按鍵。
(5)vim 高亮顯示選中的單詞
將光標移到需要高亮顯示的單詞上,在命令模式下輸入gd,那么就可以將當前的單詞在當前文本中全部高亮顯示,如下圖所示,高亮顯示dwBeInvitedUinLen。
(6)vim 輸入特殊字符
有三種方法,第一種是使用字符編碼,第二種是使用二合字母(digraph),三是使用快捷鍵(Ctrl+字母)。
使用字符編碼:
vim可以用字符編碼插入任意字符,使用此功能可以方便地輸入鍵盤上找不到的字符。使用步驟如下:
(1)編輯模式下按下Ctrl+v;
(2)如果是ASCII字符,則輸入三位十進制ASCII碼值,不足三位,前補0。比如輸入大寫字母A,則輸入065;如果是Unicode字符,則輸入“u+四位十六進制碼值”。比如輸入大寫字母A,則輸入u0041。
更多詳情內容可參見vim的幫助文檔,末行模式輸入:h i_ctrl-v_digit。
使用二合字母(digraph):
二合字母顧名思義,使用兩個字母的組合來標識特殊字符。使用步驟如下:
(1)編輯模式下按下Ctrl+k;
(2)輸入特殊字符對應的二合字母。可以使用:dig或:h digraph-table查看對應二合字母。比如回車符(Carriage Return) 的二合字母是CR。
Ctrl+字母:
在vim中,使用:set list顯示所有字符時,經常會看到有^I、^M等符號,代表的字符可以使用:h digraph-table查看,特殊字符列表如下:
在vim的編輯模式下,可使用“Ctrl+字母”進行輸入,例如使用“Ctrl+i”或“Ctrl+I”可以輸入字符^I(Tab),使用“Ctrl+m”或“Ctrl+M”可以輸入字符^M(回車)。
(7)vim其它常見操作
#顯示行號 :set number #取消行號 :set nonu #取消高亮顯示查找后的字符串 :nohl #顯示換行符 :set list #不顯示換行符 :set nolist
7.小結
vim 仍有很多未知的東西等待我們去發現,如果 vim 使用過程中有問題,歡迎留言,一同探討解決進步。
原文標題:每天一個 Linux 命令(122):vim 命令
文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
Linux
+關注
關注
87文章
11415瀏覽量
212266 -
操作系統
+關注
關注
37文章
7021瀏覽量
124669 -
命令
+關注
關注
5文章
719瀏覽量
22625
原文標題:每天一個 Linux 命令(122):vim 命令
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Linux ip命令常用操作
Linux系統中shell命令解析
Linux lsof命令的基本用法

評論