一天一個 Linux 命令(1):vim 命令


一、簡介

vim 是 Linux 操作系統中最通用的全屏幕文本編輯器,是 vi 的增強版(vi iMproved),與 vi 完全兼容,且擴充了很多功能。

vim 編輯器支持編輯模式和命令模式,編輯模式下可以完成文本的編輯功能,命令模式下可以完成對文件的操作命令,要正確使用 vim 編輯器就必須熟練掌握這兩種模式的切換。默認情況下,打開 vim 后自動進入命令模式。從編輯模式切換到命令模式使用 ESC 鍵,從命令模式切換到編輯模式使用 A、a、O、o、I、i 鍵。

二、格式說明

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查看。

三、選項說明

+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
 顯示版本信息並退出

四、內置命令說明

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:高亮顯示光標所在的單詞

五、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。

 

 

 

六、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 

七、其他(持續整理)

vim 仍有很多未知的東西等待我們去發現,如果 vim 使用過程中有問題,歡迎留言,一同探討解決進步。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM