# 【Linux高頻命令專題(19)】vi/vim
標簽(空格分隔): Linux 已歸檔
---
## 概述
其實在Linux中一切命令或者軟件都是文件,所以把vi/vim作為高頻命令專題之一,也沒什么不妥。雖然大家都稱之為編輯器~~
vim是vi的高級版本,比如有代碼高亮,也就是說可以把vim定位為程序開發工具,而不是文本編輯器,我一般把vim僅僅作為臨時情況來使用,用得更隨手的還非sublime莫屬~~
![QQ截圖20151006173848.png-28.6kB][1]
## vim的三種模式
1. 插入模式:按i進入,在此模式下可以輸入字符,按ESC將回到命令模式。
1. 命令模式:默認或esc進入,可以移動光標、刪除字符等。
1. 低行模式:esc以后shift+: 可以保存文件、退出vi、設置vi、查找等功能(低行模式也可以看作是命令模式里的)。
## vim的操作指南
以冒號開頭的全是低行模式,其他基本上命令模式
### 進入vi的命令
vi filename :打開或新建文件,并將光標置于第一行首
vi +n filename :打開文件,并將光標置于第n行首
vi + filename :打開文件,并將光標置于最后一行首
vi +/pattern filename:打開文件,并將光標置于第一個與pattern匹配的串處
vi -r filename :在上次正用vi編輯時發生系統崩潰,恢復filename
vi -o/O filename1 filename2 ... :打開多個文件,依次進行編輯
### vi 關閉文件
:w //保存文件
:w vpser.net //保存至vpser.net文件
:q //退出編輯器,如果文件已修改請使用下面的命令
:q! //退出編輯器,且不保存
:wq //退出編輯器,且保存文件
### 移動光標類命令
l :光標右移一個字符
space:光標右移一個字符
h :光標左移一個字符
Backspace:光標左移一個字符
k或Ctrl+p:光標上移一行
j或Ctrl+n :光標下移一行
Enter :光標下移一行
w或W :光標右移一個字至字首
e或E :光標右移一個字至字尾
b或B :光標左移一個字至字首
) :光標移至句尾
( :光標移至句首
}:光標移至段落開頭
{:光標移至段落結尾
:100 跳到100行
:100+ 跳到101行
:100- 跳到99行
n$:光標移至第n行尾
nG: 光標移到第n行首
H :光標移至屏幕頂行
M :光標移至屏幕中間行
L :光標移至屏幕最后行
0:(注意是數字零)光標移至當前行首
$:光標移至當前行尾
G: 跳至文件的底部
g: 文件開頭
### 屏幕翻滾類命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。
### 插入文本類命令
i :在光標前
I :在當前行首
a:光標后
A:在當前行尾
o:在當前行之下新開一行
O:在當前行之上新開一行
r:替換當前字符
R:替換當前字符及其后的字符,直至按ESC鍵
s:刪除當前光標處,并切換到插入模式
S:刪除當前行,并切換到插入模式
### 復制、粘貼
yy :將當前行復制到緩存區,也可以用 "ayy 復制,"a 為緩沖區,a也可以替換為a到z的任意字母,可以完成多個復制任務。
nyy :將當前行向下n行復制到緩沖區,也可以用 "anyy 復制,"a 為緩沖區,a也可以替換為a到z的任意字母,可以完成多個復制任務。
yw :復制從光標開始到詞尾的字符。
nyw :復制從光標開始的n個單詞。
y^ :復制從光標到行首的內容。
y$ :復制從光標到行尾的內容。
p :粘貼剪切板里的內容在光標后,如果使用了前面的自定義緩沖區,建議使用"ap 進行粘貼。
P :粘貼剪切板里的內容在光標前,如果使用了前面的自定義緩沖區,建議使用"aP 進行粘貼。
> ayy 但是按a的時候就變成插入模式了... 怎么破?
### 搜索和替換命令
/pattern:從光標開始處向文件尾搜索pattern
?pattern:從光標開始處向文件首搜索pattern
n:在同一方向重復上一次搜索命令
N:在反方向上重復上一次搜索命令
s/p1/p2/g:將當前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:將文件中所有p1均用p2替換
: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
#### 替換表達式
:%s/four/4/g
"%" 范圍前綴表示在所有行中執行替換,最后的 "g" 標記表示替換行中的所有匹配點,如果僅僅對當前行進行操作,那么只要去掉%即可
如果你有一個像 "thirtyfour" 這樣的單詞,上面的命令會出錯。這種情況下,這個單詞會被替換成"thirty4″。要解決這個問題,用 "<"來指定匹配單詞開頭:
:%s/\<four/4/g 注意,要轉譯一下
顯然,這樣在處理 "fourty" 的時候還是會出錯。用 ">" 來解決這個問題:
:%s/\<four\>/4/g
如果你在編碼,你可能只想替換注釋中的 "four",而保留代碼中的。由于這很難指定,可以在替換命令中加一個 "c" 標記,這樣,Vim 會在每次替換前提示你:
:%s/\<four\>/4/gc
### 刪除命令
ndw或ndW:刪除光標處開始及其后的n-1個字
do:刪至行首 報了一個錯
d$:刪至行尾
ndd:刪除當前行及其后n-1行
x或X:刪除一個字符,x刪除光標后的,而X刪除光標前的
Ctrl+u:刪除輸入方式下所輸入的文本
x 刪除當前字符
nx 刪除從光標開始的n個字符
dd 刪除當前行
ndd 向下刪除當前行在內的n行
u 撤銷上一步操作
U 撤銷對當前行的所有操作
### 最后行方式命令
:n1,n2 co n3:將n1行到n2行之間的內容拷貝到第n3行下
:n1,n2 m n3:將n1行到n2行之間的內容移至到第n3行下
:n1,n2 d :將n1行到n2行之間的內容刪除
:w :保存當前文件
:e filename:打開文件filename進行編輯
:x:保存當前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:執行shell命令command
:n1,n2 w!command:將文件中n1行至n2行的內容作為command的輸入并執行之,若不指定n1,n2,則表示將整個文件內容作為command的輸入
:r!command:將命令command的輸出結果放到當前行
:f 可以看文件名
### 多行注釋和取消注釋
多行注釋:
1. 進入命令行模式,按ctrl + v進入 visual block模式,然后按j, 或者k選中多行,把需要注釋的行標記起來
2. 按大寫字母I,再插入注釋符,例如//
3. 按esc鍵就會全部注釋了
取消多行注釋:
1. 進入命令行模式,按ctrl + v進入 visual block模式,按字母l橫向選中列的個數,例如 // 需要選中2列
2. 按字母j,或者k選中注釋符號
3. 按d鍵就可全部取消注釋
## vim的設置
在命令模式:
:set tabstop=2 設置tab制表符
:set nu 顯示行號
:set nonu 不顯示行號
:set autoindent 自動縮排
可以將配置添加到修改家目錄下的.vimrc文件,這個文件是隱藏的文件,避免每次輸入的麻煩,注意配置文件不要加上:
對于我來說編輯中沒有比sublime更順手的,ide中沒有比PHPstorm更強大的,所以就不深入研究vim了,更多參考以下兩篇文章:
強大的vim配置文件,讓編程更隨意 :
http://blog.csdn.net/namecyf/article/details/7787479
vim配置及插件安裝管理(超級詳細):
http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html
[1]: http://static.zybuluo.com/a5635268/xtvqqcnyzdbdmymwivbqhzuv/QQ%E6%88%AA%E5%9B%BE20151006173848.png
- Apache
- 【Apache運維基礎(1)】Apache的安裝與使用
- 【Apache運維基礎(2)】主配置文件說明
- 【Apache運維基礎(3)】虛擬主機配置說明
- 【Apache運維基礎(4)】Apache的Rewrite攻略(1)
- 【Apache運維基礎(5)】Apache的Rewrite攻略(2).htaccess文件
- 【Apache運維基礎(6)】Apache的日志管理與分析
- 工具篇
- supervisor進程管理器
- Haproxy安裝與配置
- Nginx
- 【nginx網站性能優化篇(1)】gzip壓縮與expire瀏覽器緩存
- 【nginx網站性能優化篇(2)】反向代理實現Apache與Nginx的動靜分離(LNMPA)
- 【nginx網站性能優化篇(3)】反向代理實現負載均衡
- 【nginx網站性能優化篇(4)】理解nginx的高并發原理及其配置調優
- 【nginx運維基礎(1)】Nginx的編譯安裝與使用
- 【nginx運維基礎(2)】Nginx的配置文件說明及虛擬主機配置示例
- 【nginx運維基礎(3)】Nginx的編譯PHP
- 【nginx運維基礎(4)】Nginx的日志管理(日志格式與定時分割日志)
- 【nginx運維基礎(5)】Nginx的location攻略
- 【nginx運維基礎(6)】Nginx的Rewrite語法詳解
- 【nginx運維基礎(7)】配置SSL支持https訪問
- 【nginx運維基礎(8)】配置支持http2協議
- 【nginx運維基礎(9)】了解PHP-FPM 與 Nginx 的通信機制
- 其它
- Apache與Nginx下php隱藏http頭部版本信息的實現方法
- CURL與PHP-CLI的應用【CLI篇】
- CURL與PHP-CLI的應用【Curl篇】
- Linux之SAMBA共享服務
- 【Linux常識篇(1)】所謂的正向代理與反向代理
- 【Linux常識篇(2)】理解inode
- 【Linux常識篇(3)】文件及文件夾的ctime atime mtime的含義詳解
- centOS使用手記
- 服務器日志分析
- 高頻命令
- df
- mv
- gzip
- cp
- tar
- touch
- cat
- uniq
- nl
- more
- rmdir
- less
- mkdir
- head
- rm
- tail
- 五大查詢命令
- vi&vim
- ls與目錄結構
- grep
- awk
- sed
- 其他高頻命令