VI 命令使用及實(shí)例操作
|
作者:grid.tsinghua.edu.cn 出處:grid.tsinghua.edu.cn 更新時(shí)間: 2007年06月07日
|
vi的搜索和替換
- 搜索中進(jìn)行替換
/which #搜索which
cwthat #替換成that
n #重復(fù)搜索
. #重復(fù)替換
- 一種類型的替換命令
g/pattern/s/old/new/g
第一個(gè) g 表示是有選擇的操作, pattern 指定選擇行的模式, s 表示替換操作, old 是要替換的內(nèi)容, new 是新內(nèi)容, g 表示全局替換下面是一些例子:
#給第一到十行加上括弧
:1,10/.*/(&)/
其中的
& 代表的是搜索模式
~ 代表上一次替換命令中制定的替換文本
\u 改成大寫
\l 改成小寫
\U或者\(yùn)L和\e或者\(yùn)E配合 將后面開始到被替換串結(jié)束或者到\e和\E為止的所有支付變成大寫或者小寫
另外在vi中可以使用除了\,",和|之外的任何非字母表字符做替換命令的分隔符, 這在進(jìn)行路徑替換的時(shí)候非常的有用
下面時(shí)一些例子:
#將That or this 換成 This or that
:%s/\(That\) or \(this\)/\u\2 or \l\1/
----
#將句尾的child換成children
:%s/child\([ ,.;!:?]\)/children\1/g
----
#將mgi/r/abox換成mgi/r/asquare
:g/mg\([ira]\)box/s//mg//my\1square/g <=> :g/mg[ira]box/s/box/square/g
----
#將多個(gè)空格換成一個(gè)空格
:%s/ */ /g
----
#使用空格替換句號或者冒號后面的一個(gè)或者多個(gè)空格
:%s/\([:.]\) */\1 /g
----
#刪除所有空行
:g/^$/d
----
#刪除所有的空白行和空行
:g/^[ ][ ]*$/d
----
#在每行的開始插入兩個(gè)空白
:%s/^/> /
----
#在接下來的6行末尾加入.
:.,5/$/./
----
#顛倒文件的行序
:g/.*/m0O <=> :g/^/m0O
----
#尋找不是數(shù)字的開始行,并將其移到文件尾部
:g!/^[0-9]/m$ <=> g/^[^0-9]/m$
----
#將文件的第12到17行內(nèi)容復(fù)制10詞放到當(dāng)前文件的尾部
:1,10g/^/12,17t$
~~~~重復(fù)次數(shù)的作用
----
#將chapter開始行下面的第二行的內(nèi)容寫道begin文件中
:g/^chapter/.+2w>>begin
----
:/^part2/,/^part3/g/^chapter/.+2w>>begin
----
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$
ex的命令
d 刪除
m 移動
co 復(fù)制
t 復(fù)制行
p 打印
nu 顯示行號
g 命令用于尋找匹配的行,然后執(zhí)行相應(yīng)的操作
v 反向?qū)ふ移ヅ涞牡男?然后執(zhí)行相應(yīng)的操作
ex中用;代替,做行分界符時(shí)會將;前面的行改變成當(dāng)前行
選項(xiàng)設(shè)置
#設(shè)置tab寬度
:set tabstop=4
#設(shè)置縮進(jìn)時(shí)移動的寬度
:set shiftwidth=4
#設(shè)置語法高亮模式
:set syntax=fvwm
#關(guān)閉備份
:set nobackup
:set nowritebackup
#建議按照如下的方式使用備份
:set backup
:set backupdir=/var/bak
:set backupext=.bak
#下面一些選項(xiàng)是一次聽講座的時(shí)候記錄的, 具體什么意思沒有記清楚, 但應(yīng)該很有用的
:set nocp
:set su
:set his
:set cin
:set sm #顯示匹配的括號
:set ai #自動縮進(jìn)
:set cino=:ogotocsus
:set paste/nopaste
:set lbr
:set font=mb
:set cindent #打開c縮進(jìn)模式
#打開語法高亮顯示
:syntax on
#格式重排
=
建議的主題配置:
colo torte #圖形模式
colo else #字符模式
命令與鍵
- 為了防止ex對特殊鍵進(jìn)行解釋, vi中可以用C-v對其進(jìn)行跳脫.如下所示:
[RETURN] ^M
[ESC] ^[
[BACKSPACE] ^H
C-T ^T
C-W ^W
C-x ^X
| 不能轉(zhuǎn)義
- map!用于在插入模式下強(qiáng)制映射, unmap!用于在插入模式下取消映射
- 映射一個(gè)功能鍵
:map #1 command #映射第一個(gè)功能鍵, 即F1
:map [C-v][Home] command #映射home鍵
- od命令可以用來以8進(jìn)制方式查看文件
- @register 執(zhí)行register中的文本作為命令
- r命令可以用于讀入文件或者將命令的輸出讀入當(dāng)前的緩沖區(qū)
r file #讀入文件
r! ls #讀入命令輸出
- 增加和減少縮進(jìn)級別在vi的自動縮進(jìn)模式中,可以通過下面的命令更改縮進(jìn)級別
C-T 增加一個(gè)縮進(jìn)級別
C-D 減少一個(gè)縮進(jìn)級別
^ ^D 光標(biāo)移到開始,并保留縮進(jìn)級別
0 ^D 光標(biāo)移到開始,并重置縮進(jìn)級別
可以通過下面的命令設(shè)置自動縮進(jìn)模式
:set autoindent
- <<和>>是進(jìn)行縮進(jìn)和反縮進(jìn)的命令
>> 把行或者塊右移8個(gè)空格
<< 把行或者塊左移8個(gè)空格
- 顯示控制字符
:set list #臨時(shí)的等價(jià)命令是l
- 啟用括號匹配
:set showmatch #:set sm
-設(shè)置顯示模式
:normal #正常模式
:syntax #語法高亮模式
:hex #十六進(jìn)制模式
:html #html模式
:man #man模式
:set binary #二進(jìn)制模式
:set incsearch #增量搜索模式
:set showmode #可視模式
- cindent 按照c的格式縮進(jìn)
- 在vi中查看c源碼的時(shí)候, 可以在#include "hell.h" 在雙引號中間安gf就可以打開頭文件, C-o(C-t)返回.
- 窗體分割命令
[N] sp[lit] [position] [file]
[N] new [position] [file]
[N] sv[iew] [position] [file]
- 縮寫文本
#用myurl代表http:://localhost/
:ab myurl http:://localhost/
#取消縮寫
:una myurl
使用ctags
:! ctags *.c #建立tags文件
: tag name
^] #查看tag定義
命令的選項(xiàng):
-d
-g
-l #指定語言
-m #為結(jié)構(gòu)的成員建立索引
-t #為c的typedef建立索引
-T #為C++的typedef建立索引
宏
- vi中在全文前植入行號的宏
:%s/^/^|/
:$
:let end=line(".")
:|
:let num=1
:while num<=end
:let line=getline(".")
:let line=substitude(line,$,num," ")
:call setline(".", line)
:+
:let num=num+1
:endwhile
插件
- tip of the day
- calendar
- jad
- sketch
其他
- 加密
:X #之后輸入密碼, :wq退出即可, 去掉密碼只要在輸入提示輸入密碼的時(shí)候輸入回車即可
- 將dos文件轉(zhuǎn)化為linux文件
:1,$s///g
- 在每行的行首/尾插入newstring
#行首
:g/^/s//newstring/g
:%s/^/newstring/g
行尾
:g/$/s//newstring/g
:%s/$/newstring/g
|
|
|
|