vi常用命令
輸入模式命令
輸入
命令作用
<a> 在光標後輸入文本
<A> 在當前行末尾輸入文本
<i> 在光標前輸入文本
<I> 在當前行開始輸入文本
<o> 在當前行後輸入新一行
<O> 在當前行前輸入新一行
光標移動命令
光標移動
命令作用
0移動到光標所在列的最前面[Home]
$移動到光標所在列的最後面[End]
[CTRL][d]向下半頁[PageDown]
[CTRL][f]向下一頁
[CTRL][u]向上半頁
[CTRL][b]向上一頁[PageUp]
H移動到視窗的第一列
M移動到視窗的中間列
L移動到視窗的最後列
b移動到下個字的第一個字母
w移動到上個字的第一個字母
e移動到下個字的最後一個字母
^移動到光標所在列的第一個非空白字元
n-減號移動到上一列的第一個非空白字元前面加上數字可以指定移動到以上 n 列
n+加號移動到下一列的第一個非空白字元前面加上數字可以指定移動到以下 n 列
nG直接用數字 n 加上大寫 G 移動到第 n 列
)光標所在位置到下個句子的第一個字母
(光標所在位置到該句子的第一個字母
}光標所在位置到該段落的最後一個字母
{光標所在位置到該段落的第一個字母
<h> 向前移動一個字符
<j> 向上移動一行
<k> 向下移動一行
<l> 向後移動一個字符
fx
往右移動到 x 字符上
Fx
往左移動到 x 字符上
tx
往右移動到 x 字符前
Tx
往左移動到 x 字符後
(注意:以上四個命令中,其中x是鍵入的字符)
;
分號,配合 f 和 t 使用,重複一次
,
逗號,配合 f 和 t 使用,反方向重複一次
% - 移至匹配的括號
shift +G 跳到文件尾
交換兩個字符位置
xp
上下兩行調換
ddp
把文件內容反轉
:g/^/m0/
刪除操作命令
刪除操作
命令作用
<x> 刪除光標所在的字符
<dw> 刪除光標所在的單詞
<d$> 刪除光標至行尾的所有字符
<D> 同<d$>
<dd> 刪除當前行
可在刪除命令前加上數字,如<5x>表示刪除5行。
改變與替換操作命令
改變與替換操作
命令作用
<r> 替換光標所在的字符
<R> 替換字符序列
<cw> 替換一個單詞
<ce> 同<cw>
<cb> 替換光標所在的前一字符
<c$> 替換自光標位置至行尾的所有字符
<C> 同<c$>
<cc> 替換當前行
全文替換:“g/被替換字符串/s//替換字符串/g”
>>
<<
查詢命令
查詢
命令作用
</abc> 向前查詢abc
<?abc> 向後查詢abc
<n> 向前繼續查詢
<N> 向後繼續查詢
拷貝與粘貼命令
命令作用
/yw 將光標所在單詞拷入剪貼板
y$ 將光標至行尾的字符拷入剪貼板
Y 同<y$>
yy 將當前行拷入剪貼板
p 將剪貼板中的內容粘貼在光標後
P 將剪貼板中的內容粘貼在光標前
文件編輯、保存及退出vi命令
命令作用
:q 不包存退出
:q! 不保存強制性退出
:w 保存編輯
:wfilename 存入文件filename中
:w!filename 強制性存入文件filename中
:wq / :x / ZZ 保存退出
編輯數個文件(利用vi filename(s))進入vi後)
:args 顯示編輯名單中的各個文件名
:n讀入編輯名單中的下一個文件
:rew讀入編輯名單中的第一個文件
:e#讀入編輯名單內的前一個文件
:e file 讀入另一個文件進vi(此文件可不在編輯名單內),
若原文件經修改還沒有存檔,則應先以: w 存檔。
:e! file強迫讀入另一個文件進入vi,原文件不作存檔動作。
:!command暫時退出vi並執行shell指令,執行完畢後再回到vi。
:sh暫時退出vi到系統下,結束時按Ctrl + d則回到vi。
vi filename進入vi並讀入指定名稱的文件(新、舊文件均可)。
vi +n filename進入vi並且由文件的第幾行開始。
vi +filename進入vi並且由文件的最後一行開始。
vi + /word filename 進入vi並且由文件的word這個字開始。
vi filename( s ) 進入vi並且將各指定文件列入名單內,第一個文件先讀入。
清理掉DOS文本中的^M,可以在:1,$s/^M//g,其中^是用CTRL+v上去的M是回車形成的
正則表達式
在查找、替換命令 使用以下正則表達式元字符,功能強大。
也可用在:g/命令中
& 代表最近匹配串
~ 代表最近替換串
. 任一字符
^ 行首 或 表示 非
$ 行末
/< 詞首
/> 詞尾
* 0次或多次
/( /) 分節指定與其中正則式匹配的部分,在替換時候可以用 /1 /2 /3 ... 引用匹配部分
[] 表示選擇
- 表示範圍 ,例如 [0-9]代表數字,[a-z]代表小寫字母 [^0-9a-zA-Z] 代表非數字和大小寫字母
/{m,n/} 前面部分的從 m 次 至 n 次出現,m n 爲數值
/{m/} 精確m次出現
/{m,/} 大於等於m次出現
以下舉幾例子,歡迎大家提出問題來共同探討。
1.在20列後插入串
:%s/^./{20/}/&insert something here/g
2.把C++語言裏 //註釋 修改爲 /* */ 格式
:%s//////(.*/)$////*/1/*///g
3.在建存儲過程的sql文本里,在每個create procedure procname()
前加上drop procedure procname ; [ ]裏輸入的是一個空格和TAB鍵。
:%s/^[ ]*[cC][rR][eE][Aa][tT][eE][ ]*[pP][Rr][oO][cC][eE][dD][uU][rR][eE][
]*/([^()*/]/drop procedure /1;Ctrl_VCtrl_Mcreate procedure /1/g
宏命令
首先,宏的實質是將命令存儲在寄存器中,如下是錯誤的
qa
"ayw
q
寄存器a衝突,宏挺有用的
vi的配置文件
另一方面,用戶可以在主目錄中創建.exrc環境文件,用set打入
選項,每次調用vi時,就會讀入.exrc中的指令與設置。下面是
.exrc環境文件的實例:
set wrapmarging=8
set showmode
set autoindent
set number
vim配置文件:
set nobackup
set directory=$VIM/swp "There stores all vim swap files
set ignorecase smartcase "/C to force vim to search case sensibly.
set linebreak "let vim don't split a word when linewrap, note: line doesn't be split really
if has('multi_byte_ime')
highlight Cursor guibg=Green guifg=NONE
highlight CursorIM guibg=Purple guifg=NONE
endif
set autoindent
set smartindent
set tabstop=4 "treat <TAB> as four spaces, stores <TAB> instead of spaces
set shiftwidth=4 "be used only when "<<" command is pressed
"Turn off IME when insert mode and search mode
set iminsert=0
set imsearch=-1