全屏編輯器:nano、vi(Visual Interface)、vim(Vi IMproved)
行編輯器: sed
Vim模式:命令模式、編輯模式、輸入模式、末行模式
獲取幫助:
1、vimtutor
2、vim下輸入help
模式轉換(默認爲編輯模式):
i[nsert] | 當前光標所在字符處前轉換爲輸入模式 |
a[ppend] | 當前光標所在字符處後轉換爲輸入模式 |
o | 當前光標所在行的下一新行轉換爲輸入模式 |
I | 當前光標所有行的行首轉換爲輸入模式 |
A | 當前光標所有行的行尾轉換爲輸入模式 |
O | 當前光標所在行的上一新行轉換爲輸入模式 |
Esc | 由輸入模式轉換爲編輯模式 |
: | 由編輯模式轉換爲末行模式(可查看歷史命令) |
Esc,Esc | 由末行模式轉換爲編輯模式 |
光標跳轉:
h | 向左移動一個字符 |
l | 向右移動一個字符 |
j | 向下移動一個字符 |
k | 向上移動一個字符 |
#h | 向左移動#個字符 |
w | 跳到後一個單詞的詞首 |
e | 跳到當前或下一個單詞的詞尾 |
b | 跳到當前或下一個單詞的詞首 |
) | 跳到下一句的句首 |
( | 跳到上一句的句首 |
} | 跳到下一段的段首 |
{ | 跳到上一段的段首 |
1G 或 gg | 跳到首行 |
G | 跳到尾行 |
#G | 跳到第#行 |
^ | 跳到行首的第一個非空白字符 |
$ | 跳到絕對行尾 |
0 | 跳到絕對行首 |
文件關閉:
w | 保存 |
q | 退出 |
! | 強制 |
x | 保存並退出 |
ZZ(編輯模式) | 保存並退出 |
qall | 退出所有 |
only | 閉關除當前窗口外的文件 |
打開文件:
vim +# | 打開文件並將光標移到第#行首 |
vim + | 打開文件並將光標移動最後一行 |
next | 顯示下一個文件 |
prev | 顯示上一個文件 |
first | 顯示第一個文件 |
last | 顯示最後一個文件 |
new|edit FILENAME | 在VIM中打開新的文件,new不加文件名錶示新建文件 |
地址定界:
1,7 | 第1行到7行 |
% | 全文 |
1,$ | 第1行到最後行 |
1,+6 | 第1行及以下6行 |
1,$-2 | 第1行到倒數第3行 |
.,+3 | 當前行及以下3行 |
編輯命令:
u[ndo] | 撤消操作(默認記錄50次操作) |
Ctrl+r | 取消此前的撤消 |
x | 刪除當前光標所在字符 |
#x | 刪除當前光標所在字符至第#個字符 |
dw | 刪除當前光標所在處,至單詞尾部 |
db | 刪除當前光標所在處前一字符,至單詞首部 |
de | 刪除當前光標所在處,至單詞尾部 |
d^ | 刪除當前光標所在處前一字符,至行首 |
d$ 或 D 或 C | 刪除當前光標所在處,至行尾 |
cc | 刪除當前行,並轉換到輸入模式 |
#cc | 刪除當前行至以下#行,並轉換爲輸入模式 |
yy | 複製當前行 |
#yy | 複製光標當前行至第#行 |
y$ | 複製光標所在處至行尾 |
y^ | 複製光標所在處前一字符至行首 |
p[aste|ut] | 粘貼至光標所在處之後,或下方 |
P | 貼至光標所在處之前,或上方 |
Ctrl+f | 向文件尾部翻一屏 |
Ctrl+b | 向文件首部翻一屏 |
Ctrl+d | 向文件尾部翻半屏 |
Ctrl+u | 向文件首部翻半屏 |
/keyword | 當前光標所在處向文件尾部查找 |
?keyword | 當前光標所在處向文件首部查找 |
n | 下一個,跟查找命令相同的方向 |
N | 上一個,跟查找命令相反的方向 |
> | 向右縮進 |
< | 向左縮進 |
可視化模式:
v | 選中光標劃過的字符 |
V | 選中光標劃過的行 |
Ctrl+w,s 或 split | 水平分割窗口 |
Ctrl+w,v 或 vsplit | 垂直分割窗口 |
Ctrl+w,s 或 30s | 水平分割窗口,窗口高度爲30 |
Ctrl+w,s 或 30vs | 垂直分割窗口,窗口寬度爲30 |
Ctrl+w,+/- | 調整窗口高度(默認每次調整1) |
Ctrl+w,</> | 調整窗口寬度(默認每次調整1) |
res[ize] N | 調整窗口高度爲N |
vert[ical] res[ize] N | 調整窗口寬度爲N |
-o | 水平分割窗口(一次打開多個文件時) |
-O | 垂直分割窗口(一次打開多個文件時) |
Ctrl+ww | 多個窗口間切換 |
Ctrl+w,l|方向鍵 | 切換到右側窗口 |
Ctrl+w,h|方向鍵 | 切換到左側窗口 |
Ctrl+w,k|方向鍵 | 切換到上方窗口 |
Ctrl+w,j|方向鍵 | 切換到下方窗口 |
Ctrl+w,L | 將當前窗口移動到右側窗口 |
Ctrl+w,H | 將當前窗口移動到左側窗口 |
Ctrl+w,K | 將當前窗口移動到上方窗口 |
Ctrl+w,J | 將當前窗口移動到下方窗口 |
文件對比:
vim -d FILE1 FILE2 | 比較模式打開兩個文件 |
vimdiff FILE1 FILE2 | |
diffsplit FILE2 | 當前文件與新文件對比,並水平分割窗口 |
vert[ical] diffsplit FILE2 | 當前文件與新文件對比,並垂直分割窗口 |
diffthis | 對比已打開的2個窗口內容 |
diffupdate | 文本內容修改後,更新對比檢查 |
[c | 跳到前一個不同點 |
]c | 跳到後一個不同點 |
set diffopt=context:N | 只顯示不同點的行,及前後N行(也是摺疊) |
zo (fold open) | 展開摺疊(配合diffopt) |
zc (fold close) | 重新摺疊(配合diffopt) |
set noscrollbind | 取消兩個窗口聯動 |
set scrollbind | 綁定兩個窗口聯動(默認爲聯動) |
set scrollopt ver,hor,jump | ver:啓用垂直同步滾動 hor:啓用水平同步滾動 jump:切換窗口時,使垂直滾動始終同步 |
syncbind | 同步兩上窗口的光標位置 |
環境設置:
vim的配置文件:
全局:/etc/vimrc
個人:~/.vimrc
set all | 查看所有set選項(顯示所有的vi環境變量可能取值及其當前設置值) |
set | 顯示當前所有的vi環境變量設置 |
syntax on/enable/off | 自動語法高亮 |
set hl/nohl(hlsearch) | 高亮顯示搜索結果 |
set hidden | 沒有保存的緩衝區可以自動被隱藏 |
set sm/nosm(showmatch) | 顯示括號配對,當鍵入“]”“)”"}"時,高亮度顯示匹配的括號/缺省不高亮 |
set showmode/shownomode | 處於文本輸入方式時加亮按鈕條中的模式指示器/缺省不指示當前模式 |
set ruler | 打開狀態欄標尺 |
set scrolloff=5 | 設定光標離窗口上下邊界 5 行時窗口自動滾動 |
set ai/noai(autoindent) | 自動縮進,新行與前面的行保持—致的自動空格/不自動空格(缺省) |
set aw/noaw | 自動寫,轉入shell或使用:n編輯其他文件時,當前的緩衝區被寫入/不寫 |
set cindent | 以C/C++的模式縮進(在C編碼時,用戶常常想要indent縮進內嵌代碼塊) |
set smartindent | 爲C程序提供自動縮進 |
set flash/noflash | 在出錯處閃爍但不嗚叫(缺省)/使用嗚叫而不閃爍 |
set ic/noic(ignorecase) | 在查詢及模式匹配時忽賂大小寫/不忽略大小寫(默認區分大小寫) |
set nu/nonu(number) | 屏幕左邊顯示行號/不顯示行號(缺省) |
set showcmd | 在狀態欄顯示目前所執行的指令,未完成的指令片段亦會顯示出來 |
set warn/nowarn | 對文本進行了新的修改後,離開shell時系統給出顯示(缺省) |
set ws/nows | 在搜索時如到達文件尾則繞回文件頭繼續搜索 |
set wrap/nowrap | 長行顯示自動折行 |
colorscheme evening | 設定背景爲夜間模式 |
filetype on | 通過$VIMRUNTIME/filetype.vim.打開文件類型檢測 |
filetype plugin on | 自動識別文件類型,自動匹配對應的, “文件類型Plugin.vim”文件,使用縮進定義文件 |
set shiftwidth=4 | 設定 << 和 >> 命令移動時的寬度爲 4 |
set softtabstop=4 | 使得按退格鍵時可以一次刪掉 4 個空格,不足 4 個時刪掉所有剩下的空格) |
set tabstop=4 shiftwidth=4 | 設定 tab 長度爲 4,移動(shift)命令時移動的字符數 |
set list/nolist | 顯示不可視字符 |
set listchars = tab:>-,trail:- | 將製表符顯示爲'>---',將行尾空格顯示爲'-' |
set listchars=tab:.\ ,trail:. | 將製表符顯示爲'. ' |
set autochdir | 自動設置目錄爲正在編輯的文件所在的目錄 |
查找替換:
:地址定界s/查找模式/替換成的內容/gi
:地址定界s@查找模式@替換成的內容@gi
:g/查找模式/s/查找模式/替換成的內容/gi
1) g:global (全局,沒有選項g則只替換每行每一次匹配到的模式)
2) i:ignorecase (忽略大小寫)
3) /|@:分割符
e.g.
1、將所有/de/null替換爲/tmp/log.txt
%s/\/dev\/null/\/tmp\/log.txt/g
%s@/dev/null@/tmp/log.txt@/g
2、將所有w開頭,中間兩個字母,並以o結尾的單詞替換爲where
%s/\<w[[:alpha:]]\{2\}o\>/where/g
3、將所有d開頭,中間兩個字母,並以n結尾的單詞替換爲大寫字母
%s@\<d\([[:alpha:]]\{2\}\)n\>@D\1N@g
4、將所有game後加上over,忽略大小寫
%s/\([gG][aA][mM][eE]\)/\1over/g
%s/[gG][aA][mM][eE]/&over/g
注:&表示模式匹配的內容
5、將所有空格開頭的行前添加#號
%s/^[[:space:]]/#&/
%s@^[[:space:]]@#&@
6、刪除空白行
:g/^$/d
:%s/^\n//g
:g/^\n/s///g
7、刪除多行空白行,保留一行空白行
:%s/^\n$//g
8、將以path開頭行中的GE替換爲ge
:g/^path/s/GE/ge/g