為什么要學(xué) vim
linux 有大量的配置文件,所以 linux 的文本處理工具也是比較多的,常用的有
less vi head tail cat grep sed awk .... 。其中編輯一些配置文件,及查看日志時(shí),常用的工具就是 vim 和 less ,而且它兩的快捷鍵又很相似,所以學(xué)會(huì) vim 的使用還是挺必要的。
預(yù)期讀者
運(yùn)維,開(kāi)發(fā)、及想對(duì) linux 進(jìn)階的人。學(xué) bash 的話(huà), 會(huì) vim 還是方便點(diǎn),不可能每次都要跑到 windows 上去編輯吧
開(kāi)始學(xué)習(xí)
vi 的三種模式及切換
graph LR
A[一般模式] -- I/O/A/R--> B[編輯模式]
A -- 冒號(hào)/問(wèn)號(hào)/正斜杠 --> C[指令列模式]
C -- ESC --> A
B -- ESC --> A
從一般模式切換到編輯模式各命令區(qū)別
- i 在當(dāng)前光標(biāo)處插入
- o 另起一行插入
- a 后面一個(gè)字符插入
- r 替換輸入。這個(gè)在改單個(gè)字符很有用,因?yàn)樗惶鎿Q一個(gè)字符又變回一般模式了
常用按鍵及功能
下面的指令是區(qū)分大小寫(xiě)的
移動(dòng)游標(biāo)的方法 (一般模式)
- ↑→↓← 上右下左移動(dòng),5↓ 向下移動(dòng) 5 行
- ctrl + f 向下翻頁(yè),翻半頁(yè)命令為 ctrl + d
- ctrl + b 向上翻頁(yè),翻半頁(yè)命令為 ctrl + u
- 0 移動(dòng)到一行的開(kāi)頭,移到到一行的結(jié)尾為 $
- gg 到開(kāi)頭,G 移動(dòng)到結(jié)尾 ,3G 移動(dòng)到第 3 行
- <enter> 游標(biāo)向下移動(dòng)一行,3<enter> 游標(biāo)向下移動(dòng) 3 行
刪除,復(fù)制,粘貼 (一般模式)
- x 向后刪除一個(gè)字符,X 向前刪除一個(gè)字符,3x 向后刪除 3 個(gè)字符
- dd 刪除一行,3dd 刪除3 行
- d$ 從當(dāng)前光標(biāo)位置刪除到結(jié)尾 ,dG 從當(dāng)前位置到最后一行全部刪除
- yy 復(fù)制當(dāng)前行 ,3yy 復(fù)制 3 行
- p 在下一行粘貼復(fù)制的東西,P 在上一行粘貼
- u 撤回操作
- . 重復(fù)上一次操作
查找與替換(一般模式)
- /word 向下查找字符,?word 向上查找字符
- n 重復(fù)前一個(gè)搜索的動(dòng)作,按下 n 后,會(huì)繼續(xù)找下一個(gè)匹配的字符
- 1,5s/sanri/9420/g 搜索第 1 行到第 5 行的 sanri 字符串,替換成 9420
- 1,$s/sanri/9420/g 搜索第 1 行到最后一行的 sanri 字符串,替換成 9420
選擇文本 (一般模式)
- v 然后使用方向鍵,相當(dāng)于在 windows 按住鼠標(biāo)拖動(dòng)
- V 光標(biāo)經(jīng)過(guò)的行會(huì)選擇
- ctrl +v 選擇列模式
- y 選擇的文本復(fù)制
- d 選擇的文本刪除
總結(jié)一下
從上面的命令來(lái)看在vi 中,一些字母都是有著特別的含義的,比如
$ 代表行結(jié)尾,0 代表行開(kāi)頭,G 代表最后一行,y 代表復(fù)制,d 代表刪除行,x 代表刪除字符、
數(shù)字一般表示重復(fù)做幾次的意思,大小寫(xiě)代表的含義一般剛好相反、
翻頁(yè)的快捷鍵剛好是英文的縮寫(xiě)
ctrl + f front page
ctrl + b back page
ctrl + d down page
ctrl + u up page
保存文件另存為(命令模式)
- :w 保存文件,:w! 強(qiáng)制寫(xiě)文件(需要權(quán)限)
- :q 退出,:q! 退出不保存
- :wq 保存并退出,:wq! 強(qiáng)制保存并退出(需要權(quán)限)
- :1,5 w [filename] 將第一行到第 5 行的數(shù)據(jù)寫(xiě)入新的文件
- :! command 執(zhí)行命令,在編輯文件的時(shí)候可以查看一些信息而不需要退出文件
- :set nu 顯示行號(hào),:set nonu 不顯示行號(hào)
練習(xí)一下
wget 'http://linux.vbird.org/linux_basic/0310vi/man.config'
- 使用 vi 開(kāi)啟目錄下的 man.config 這個(gè)檔案;
- 在 vi 中設(shè)定一下行號(hào);
- 移動(dòng)到第 58 行,向右移動(dòng) 40 個(gè)字元,請(qǐng)問(wèn)你看到的雙引號(hào)內(nèi)是什么目錄?
- 移動(dòng)到第一行,并且向下搜尋一下‘ bzip2 '這個(gè)字串,請(qǐng)問(wèn)他在第幾行?
- 接著下來(lái),我要將 50 到 100 行之間的‘小寫(xiě) man 字串'改為‘大寫(xiě) MAN 字串',并且一個(gè)一個(gè)挑選是否需要修改,如何下達(dá)指令?如果在挑選過(guò)程中一直按‘y', 結(jié)果會(huì)在最后一行出現(xiàn)改變了幾個(gè) man 呢?
- 修改完之后,突然反悔了,要全部復(fù)原,有哪些方法?
7.我要復(fù)制 65 到 73 這九行的內(nèi)容(含有MANPATH_MAP),并且貼到最后一行之后;
- 21 到 42 行之間的開(kāi)頭為 # 符號(hào)的注解資料我不要了,要如何刪除?
- 將這個(gè)檔案另存成一個(gè) man.test.config 的檔名;
- 去到第 27 行,并且刪除 15 個(gè)字元,結(jié)果出現(xiàn)的第一個(gè)單字是什么?
- 在第一行新增一行,該行內(nèi)容輸入‘I am a student...';
- 儲(chǔ)存后離開(kāi)吧!
答案如下:
vi man.config
:set nu
58G 40→ /dir/bin/foo
gg /bzip2 118 行
50,100s/man/MAN/gc 25 處修改,有 23 行有變動(dòng)
u ,或者不保存退出 :q!
定位到 65 行 65G ,復(fù)制 9 行 9yy ,定位最后一行 G ,粘貼 p
:21,42s/^#//g //里面是可以使用正則的
:w man.test.config
27G 15x you
定位到第一行 gg ,i <enter> 然后輸入內(nèi)容
:wq
多文件編輯
vi 后面可以接多個(gè)文件,像這樣
n 編輯下一個(gè)文件
N 編輯上一個(gè)文件
files 顯示當(dāng)前正在編輯的所有文件
多視窗編輯
可以支持在同一個(gè)窗口打開(kāi)多個(gè)文件,使用 :sp [filename] 命令,像這樣
每一個(gè)窗口都有自己?jiǎn)为?dú)的模式和命令
[ctrl]+w+↓ 切換到下一個(gè)窗口
[ctrl]+w+↑ 切換到上一個(gè)窗口
編輯 vim 的配置文件 ~/.vimrc (簡(jiǎn)單配置)
每行一個(gè)配置 " 是注釋
可以使用命令 :set all 查看所有配置項(xiàng),常用的配置項(xiàng)如下:
set nu
設(shè)置行號(hào)
set ts=4
設(shè)置按下一 tab 時(shí),縮進(jìn) 4 個(gè)空格的位置
set tabstop=4
設(shè)置顯示的時(shí)候,一個(gè) tab 占 4 個(gè)空格的寬度
set autoindent
自動(dòng)縮進(jìn),這對(duì)于寫(xiě)代碼很有用
上面的命令已經(jīng)設(shè)置好了展示,退格和按下 tab 都是用以制表符為單位。如果需要使用空格來(lái)表示制表符則需要加以下幾個(gè)配置
set expandtab
使用空格來(lái)表示縮進(jìn),而不是制表符
set softtabstop=4
退格的時(shí)候,如果遇到四個(gè)連續(xù)的空格,一次性刪除,而不是一個(gè)一個(gè)的刪
``
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。