Linux - VIM 指令簡介

Vim 的指令蒐集

文書處理器(vim)
管理員至少一定要會一種編輯器,在 Lunix 最火紅三大編輯器分別是 vi , emacs 及 nano,以程式設計者而言,vi 更合適於程式開發,但對不熟悉的人說,根本無力上手,所以蒐集 vim 的指令,和好用的設定,讓新手可以更快熟悉 vim。 


  • vim 的工作模式:
    • 命令模式 (Command Mode):移動、複製、刪除、貼上
    • 編輯模式 (Edit Mode):插入與取代文件
    • 指令列模式 (Last Line Mode):搜尋、自動取代、檔案存取等,

  • vim 的工作模式切換流程:
  • vim 命令模式
命令
說明
h / ←
游標向移一個字元
j / ↓
游標向移一個字元
k / ↑
游標向移一個字元
l / →
游標向移一個字元
<Ctrl>+f
螢幕向下捲動一頁 (Page Down)
<Ctrl>+b
螢幕向上捲動一頁 (Page Up)
<Ctrl>+d
螢幕向下捲動半頁
<Ctrl>+u
螢幕向上捲動半頁
+
游標移動到非空白字元的下一列
-
游標移動到非空白字元的上一列
N<space>
游標在游標行向右移動N個字元
^ (<Shift+6)
<HOME>
游標移動到游標行的開頭
$ (<Shift+4)
<END>
游標移動到游標行的結尾
H
游標移動到螢幕的第一行第一個字
M
游標移動到螢幕的中央那一行的第一個字
L
游標移動到螢幕的最後一行的第一個字
G
游標移動到螢幕的最後一行
NG
游標移動到檔案的最後N
gg
游標移動到檔案的第一行
N<ENTER>
游標向下移動N
x
刪除游標所在位置的字元 (Del)
X
刪除游標所在位置左邊的字元(Backspace)
dd
刪除游標所在的一整行
Ndd
刪除游標所在以下N
d1G
刪除由第一行到游標所在的那一行
dG
刪除游標所在的那一行到最後一行
d$
刪除游標所在位置到該行的最後一個字元
d0
刪除游標所在位置到該行的第一個字元
p
貼上複製或刪除的資料在游標所在的下一行
P
貼上複製或刪除的資料在游標所在的上一行
J
將游標所在列與下一列的資料結合同一列
c
重複刪除多個資料。 EX : 向下刪除 10 列 10cj
u
復原前一個動作
<Ctrl>+r
重做前一個動作
.
重覆做前一個命令
yy
複製游標所在的那一行
Nyy
複製游標所在的以下N
y1G
複製游標所在的第一行
yG
複製游標所在的最末行
y$
複製游標所在位置到該行的最後一個字元
y0
複製游標所在位置到該行的第一個字元
ZZ
存檔離開

  • vim 進入編輯模式的指令
命令
說明
i
從游標的所在位置開始插入文字
I
從游標所在位置的該行第一個字元開始插入文字
a
從游標的所在位置右邊開始插入文字
A
從游標所在位置的該行最後一個字元開始插入文字
o
從游標所在位置的下一行開始插入文字
O
從游標所在位置的上一行開始插入文字
r
取代游標所在位置的字元,並回到命令模式
R
從游標所在位置的字元開始取代
s
刪除游標所在位置的一整行後,進入插入模式
S
刪除游標所在位置的一整行後,進入插入模式

  • vim 指令列模式
命令
說明
/text
從游標的所在位置向下搜尋 text 字申,
N:找上一個;n:找下一個。
?text
從游標的所在位置向上搜尋 text 字申,
N:找上一個;n:找下一個。
:w
儲存檔案
:w!
若檔案屬性是唯讀,可以強制存檔。但是若沒有該檔的執行權,
就沒有存檔
:w filename
另存新檔為filename
:q
離開 vim,若檔案有修改會有警示
:q!
強制離開不會存檔
:x
存檔離開
:s/text1/text2/g
從檔案的頭到尾搜尋 text1,並取代成 text2
:N1,N2s/text1/text2/g
在N1行到N2行間,搜尋 text1,並取代成 text2
:N1,N2s/text1/text2/gc
在N1行到N2行間,搜尋 text1,
尋問使用者是否需要取代成 text2
:N1,N2 w filename
將在N1行到N2行間的內容,儲存到 filename
:r filename
把 filename 的檔案內容放在游標所在位置的後面

  • 多檔案編輯: vim file1 file2
命令
說明
:n
編輯下一個檔案
:N
編輯上一個檔案
:files
顯示出目前 vim 中開啟的所有檔案名稱

  • 多視窗編輯
命令
說明
:sp [filename]
水平開啟一個新視窗,沒有加檔名兩個視窗顯示的是同一個檔案。
<Ctrl>+w+s
水平分割視窗
<Ctrl>+w+v
垂直分割視窗
<Ctrl>+w+方向鍵
在分割視窗中移動游標

  • 環境設定:可以在指令列模式設定,但是設定在關閉 vim 後就被清除。若是固定設定,建議可以修改 ~/.vimrc,如果沒有這個檔案,請從 /etc/vim 目錄下的 vimrc 複製到 ~/.vimrc。
命令
說明
:set
顯示和系統預設值不同的設定參數。
:set all
顯示所有的設定值。
:set autoindent
設定自動縮排。
:set backup
設定自動設定備份檔。
:set backspace = (0/1/2)
設定使用 backspace 來刪除任意字元。
0/1 - 僅可刪除剛剛輸入的字元,無法刪除原本就已經存在的字元
2 - 可以刪除任意值
:set bg = dark/light
設定背景顏色的色調。
:set hlsearch
設定將搜尋字串反白。
:set nu
顯示行號。
:set ruler
設定顯示右下角的狀態說明列。
:set showmatch
設定顯示小括號 ( 和大括號 { 的對應括號。
:set showmode
設定顯示文字編輯模式”--INSERT--”在左下角的狀態列。
:set syntax
依程式語法顯示不同顏色。
:set tabstop=N
設定<TAB>鍵移動的字元數, N的預設值為 8。

  • vim 常用指令示意圖

vim 注意事項

    • 如何修改 .vimrc
      • 每次檔案開啟都直接跳到檔案的最尾端
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$
")|exe("norm '\"")|else|exe "norm $"|endif|endif

    • 設定 cTag 的連結檔
set tags=tags;
set autochdir

    • 中文編碼的問題 - vim 裡面怎麼無法顯示正常的中文啊?因為中文編碼有 big5 與 utf8 兩種,如果你的檔案是使用 big5 編碼製作的,但在 vim 的終端介面中你使用的是萬國碼(utf8)
      • 使用LANG指令修改語系編碼
$ LANG=zh_TW.big5

    • 在終端介面工具列的『終端機』-->『設定字元編碼』 -->『中文 (正體) (BIG5)』

DOS 與 Linux 的斷行字元 -

在 DOS 使用的斷行字元為 ^M$ ,我們稱為 CR 與 LF 兩個符號。 而在 Linux 底下,則是僅有 LF ($) 這個斷行符號。

在 Linux 底下的指令在開始執行時,他的判斷依據是 『Enter』,而 Linux 的 Enter 為 LF 符號, 不過,由於 DOS 的斷行符號是 CRLF ,也就是多了一個 ^M 的符號出來,
在這樣的情況下,如果是一個 shell script 的程式檔案,將可能造成『程式無法執行』的狀態~ 因為他會誤判程式所下達的指令內容。

$ dos2unix [-kn] file [newfile]
$ unix2dos [-kn] file [newfile]

參數
說明
-k
保留該檔案原本的 mtime 時間格式 (不更新檔案上次內容經過修訂的時間)
-n
保留原本的舊檔,將轉換後的內容輸出到新檔案,如: dos2unix -n old new


  1. 語系編碼轉換 - 將檔案的編碼轉換成新的編碼

  • 列出支援的語系
$ iconv --list

  • 轉換文件的語系
$ iconv -f 原本編碼 -t 新編碼 filename [-o newfile]

參數
說明
-f
from ,亦即來源之意,後接原本的編碼格式。
-t
to ,亦即後來的新編碼要是什麼格式。
-o filename
如果要保留原本的檔案,那麼使用 -o 新檔名,可以建立新編碼檔案。

留言

這個網誌中的熱門文章

EC 所需知識 - SMBUS

EC 所需知識 - KBC

EC 所需知識 - LPC