vi(vim)是上Linux很是經常使用的編輯器,不少Linux發行版都默認安裝了vi(vim)。vi(vim)命令繁多可是若是使用靈活以後將會大大提升效率。linux
vi是「visual interface」的縮寫,vim是vi IMproved(加強版的vi)。在通常的系統管理維護中vi就夠用,若是想使用代碼加亮的話能夠使用vim。vim
下面是vi的使用教程:包含vi的基本介紹、使用模式、文件的打開關閉保存、插入文本或新建行、移動光標、刪除、恢復字符或行、搜索等等,緩存
算是一篇比較適合新手學習vi的教程。編輯器
vi有3個模式:插入模式、命令模式、低行模式(底座模式)。學習
插入模式:在此模式下能夠輸入字符,按ESC將回到命令模式。spa
命令模式:能夠移動光標、刪除字符等。unix
低行模式:能夠保存文件、退出vi、設置vi、查找等功能(低行模式也能夠看做是命令模式裏的)。orm
打開文件、保存、關閉文件(vi命令模式下使用)blog
vi filename //打開filename文件教程
:w //保存文件
:w cszhi.com //保存至cszhi.com文件
:q //退出編輯器,若是文件已修改請使用下面的命令
:q! //退出編輯器,且不保存
:wq //退出編輯器,且保存文件
插入文本或行(vi命令模式下使用,執行下面命令後將進入插入模式,按ESC鍵可退出插入模式)
a //在當前光標位置的右邊添加文本
i //在當前光標位置的左邊添加文本
A //在當前行的末尾位置添加文本
I //在當前行的開始處添加文本(非空字符的行首)
O //在當前行的上面新建一行
o //在當前行的下面新建一行
R //替換(覆蓋)當前光標位置及後面的若干文本
J //合併光標所在行及下一行爲一行(依然在命令模式)
移動光標(vi命令模式下使用)
一、使用上下左右方向鍵
二、命令模式下:
h 向左、j 向下、k 向上、l 向右。
空格鍵向右、Backspace向左、Enter移動到下一行首、-移動到上一行首。
刪除、恢復字符或行(vi命令模式下使用)
x //刪除當前字符
nx //刪除從光標開始的n個字符
dd //刪除當前行
ndd //向下刪除當前行在內的n行
u //撤銷上一步操做
U //撤銷對當前行的全部操做
搜索(vi命令模式下使用)
/cszhi //向光標下搜索cszhi字符串
?cszhi //向光標上搜索cszhi字符串
n //向下搜索前一個搜素動做
N //向上搜索前一個搜索動做
跳至指定行(vi命令模式下使用)
n+//向下跳n行 (數字+shift +)
n-//向上跳n行 (數字+shift -)
nG //跳到行號爲n的行
G //跳至文件的底部
設置行號(vi命令模式下使用)
:set nu //顯示行號
:set nonu //取消顯示行號
複製、粘貼(vi命令模式下使用)
yy //將當前行復制到緩存區,也能夠用 "ayy 複製,"a 爲緩衝區,a也能夠替換爲a到z 的任意字母,能夠完成多個複製任務
nyy //將當前行向下n行復制到緩衝區,也能夠用 "anyy 複製,"a 爲緩衝區,a也能夠替換爲a到z的任意字母,能夠完成多個複製任務
yw //複製從光標開始到詞尾的字符
nyw //複製從光標開始的n個單詞
y^ //複製從光標到行首的內容
y$ //複製從光標到行尾的內容
p //粘貼剪切板裏的內容在光標後,若是使用了前面的自定義緩衝區,建議使用"ap 進行粘貼
P //粘貼剪切板裏的內容在光標前,若是使用了前面的自定義緩衝區,建議使用"aP 進行粘貼
替換(vi命令模式下使用)
:s/old/new //用new詞替換行中首次出現的old詞
:s/old/new/g //用new詞替換行中全部的old詞
:n,m s/old/new/g //用new詞替換從n到m行裏全部的old詞
:%s/old/new/g //用new詞替換當前文件裏全部的old詞
編輯其餘文件
:e o_filenam //編輯文件名爲 o_filenam 的文件
修改文件格式
:set fileformat=unix //將文件修改成unix格式,如win下面的文本文件在linux下會出現^M
這裏能夠直接去^M:
有兩種狀況,會出現打開的文件都顯示^M符號:
1. vim被配置爲fileformat=unix,而你打開的文件都是dos格式的。unix格式的換行符爲0A(ascii碼)也就是<LF>,dos格式的換行符爲 0D 0A(也就是<CR><LF>),<CR>其實就顯示爲^M。下面是詳細講解:
DOS, Mac 和Unix格式的文件
回想計算機的史前史,那時的打字機使用兩個字符來開始一個新行。
首先是一個字符命令使打印頭移回開始位置(回車,<CR>),而後另外一個字
符命令控制向前進紙一行(進紙,<LF>).
在計算機誕生之初,存儲設備十分昂貴。因而有人就提出沒有必要
用兩個字符來表示一行的結束。UNIX一族決定只用進紙一個字符<Line
Feed>來表示行尾。來自蘋果陣營的人則把回車<CR>做爲換行的標
準。MS-DOS(和微軟的Windows)仍然決定沿用古老的回車換行<CR><LF>傳
統。
這也意味着若是把文件從一個系統移到另外一個不一樣的系統,你就會遇
到與換行相關的問題。Vim編輯器則能夠識別這些不一樣格式的文件。
你能夠在'fileformats'選項裏指定你但願Vim能自動識別的格式的集
合。下面的這個命令就可讓Vim能自動識別UNIX格式和MS-DOS格式:
:set fileformats=unix,dos
把這句話放在_vimrc中,通常狀況就都能OK。
2. 你的文本中既有unix的換行符,又有dos的換行符,那麼vim會認爲你打開的是unix的,因此,那些dos的換行符就會出現惱人的^M。不過這種狀況不常見。辦法是:
1)若你的vim版本大於7.1,並想用dos顯示和保存,以下語句:
:e ++ff=dos
2)若你的vim版本小於等於7.1,又想把文章按照dos格式顯示和保存,以下語句:
:set ff=dos
:%s/\r\+$//e /*清除行末的不可打印字符包括但不限於^M*/
3)若你的vim版本小於等於7.1,又想把文章按照unix格式顯示和保存,以下語句:
:set ff=unix
:%s/\r\+$//e
或者打開文件:
替換命令就能夠了,輸入^M的時候按住ctrl鍵不放,依次按下v和m
如全文替換爲空(沒有):
1,$s/^M//g