Linux vi 深刻簡出,從入門到精通

簡介

題圖無關

vi 是 unix 平臺下一個著名的的文本編輯器,熟練使用它能極大地提升你的效率。而 vim 又做爲 vi 的加強版,功能強大、高度可定製,被社區用戶極大地推崇。shell

快速入門

三種模式

  • 插入模式 (insert) 用於輸入文本。在插入模式下,你輸入的任何字符都將顯示在屏幕並存於文件。vim

  • 命令 (command) 模式用於大多數編輯功能。在命令模式下,全部的輸入都將產生必定的響應而不是 直接到文本中,例如移動光標、刪除一塊文本、拷貝文本等。編輯器

  • 第三個模式是執行另外的功能,例如查找、全局替換、處理多個文件等。spa

進入文件

vi file_name。 vi 後面接文件名,就能打開編輯界面,若是文件不存在,將新建一個文件。進入文件後,實際上是進入的命令模式,這個時候不能作文件的正常編輯。命令行

vi filename :打開或新建文件,並將光標置於第一行首 

vi +n filename :打開文件,並將光標置於第n行首 

vi + filename :打開文件,並將光標置於最後一行首 

vi +/pattern filename:打開文件,並將光標置於第一個與pattern匹配的串處 

vi -r filename :在上次正用vi編輯時發生系統崩潰,恢復filename 

vi filename....filename :打開多個文件,依次進行編輯

插入模式

進入文件後,就能夠按 ia 命令,進入編輯模式。這個時候你就能夠輸入任何想輸入的內容了unix

保存、退出

輸入結束後,按下 ESC,就返回到了命令模式。code

  • :wq 保存文件,退出orm

  • :q 退出。防止沒有保存就退出。blog

  • :q! 退出。不管保存與否,都退出。crontab

  • :wq! 強制保存

做爲系統自帶軟件,不用安裝就很容使用vi --version

經常使用快捷鍵

光標移動

在命名模式,你能夠按如下快捷,進行光標的快速移動。

h    左一個字符
j    下一行
k    上一行
l    右一個字符
w, W    前一個單詞 (W 忽略標點)
b, B    後一個單詞 (B 忽略標點)
$    到行尾
^    到行首第一個非空字符
0    行首
G    到緩衝首
nG    到第 n 行

你想向下移動 3行「3j」,向後移動 3 個單詞「3w」。其餘操做同理。

快速編輯

x        向後刪除一個字符
dw       刪除一個單詞
d3w      刪除 3 個單詞
dd       刪除一行
d下箭頭   向下刪除兩行
d上箭頭   向下刪除兩行
D        向後刪除
u        撤銷操做
:sh      切換到命令行,使用ctrl+d切換回vim

其餘命令 見文章末尾

高亮配置

輸入 vi --version 找到 vi 的配置文件。
配置文件的地址:

system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"

打開配置文件

/usr/share/vim/vimrc 爲默認配置,沒法修改。因此編輯當前用戶的 $HOME/.vimrc 文件

編輯配置文件

注意: 註釋以 『" 』開頭。

" configuration file for vim
set modelines=0         " CVE-2007-2438

" Normally we use vim-extensions. If you want true vi-compatibility
" remove change the following statements
set nocompatible        " Use Vim defaults instead of 100% vi compatibility
set backspace=2         " more powerful backspacing

set ai                  " auto indenting
set history=100         " keep 100 lines of history
set ruler               " show the cursor position
syntax on               " syntax highlighting
set hlsearch            " highlight the last searched term
filetype plugin on      " use the file type plugins
" set nu open line num
colorscheme desert
" When editing a file, always jump to the last cursor position
autocmd BufReadPost *
\ if ! exists("g:leave_my_cursor_position_alone") |
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal g'\"" |
\ endif |
\ endif

" Don't write backup file if vim is being called by "crontab -e"
au BufWrite /private/tmp/crontab.* set nowritebackup nobackup
" Don't write backup file if vim is being called by "chpass"
au BufWrite /private/etc/pw.* set nowritebackup nobackup

主題配置

列出全部的主題

ls /usr/share/vim/vim74/colors

而後在配置文件指定對應的 colorscheme。

例如:

`colorscheme desert`

demo

clipboard.png

更多命令

移動光標類命令

h :光標左移一個字符 

l :光標右移一個字符 

space:光標右移一個字符 

Backspace:光標左移一個字符 

k或Ctrl+p:光標上移一行 

j或Ctrl+n :光標下移一行 

Enter :光標下移一行 

w或W :光標右移一個字至字首 

b或B :光標左移一個字至字首 

e或E :光標右移一個字至字尾 

) :光標移至句尾 

( :光標移至句首 

}:光標移至段落開頭 

{:光標移至段落結尾 

nG:光標移至第n行首 

n+:光標下移n行 

n-:光標上移n行 

n$:光標移至第n行尾 

H :光標移至屏幕頂行 

M :光標移至屏幕中間行 

L :光標移至屏幕最後行 

0:(注意是數字零)光標移至當前行首 

$:光標移至當前行尾

屏幕翻滾類命令

Ctrl+u:向文件首翻半屏 

Ctrl+d:向文件尾翻半屏 

Ctrl+f:向文件尾翻一屏 

Ctrl+b;向文件首翻一屏 

nz:將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。

插入文本類命令

i :在光標前 

I :在當前行首 

a:光標後 

A:在當前行尾 

o:在當前行之下新開一行 

O:在當前行之上新開一行 

r:替換當前字符 

R:替換當前字符及其後的字符,直至按ESC鍵 

s:從當前光標位置處開始,以輸入的文本替代指定數目的字符 

S:刪除指定數目的行,並以所輸入文本代替之 

ncw或nCW:修改指定數目的字 

nCC:修改指定數目的行

刪除命令

ndw或ndW:刪除光標處開始及其後的 n-1 個字 

do:刪至行首 

d$:刪至行尾 

ndd:刪除當前行及其後n-1行 

x或X:刪除一個字符,x刪除光標後的,而X刪除光標前的 

Ctrl+u:刪除輸入方式下所輸入的文本

搜索及替換命令

/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替換

選項設置

all:列出全部選項設置狀況 

term:設置終端類型 

ignorance:在搜索中忽略大小寫 

list:顯示製表位(Ctrl+I)和行尾標誌($) 

number:顯示行號 

report:顯示由面向行的命令修改過的數目 

terse:顯示簡短的警告信息 

warn:在轉到別的文件時若沒保存當前文件則顯示NO write信息 

nomagic:容許在搜索模式中,使用前面不帶「\」的特殊字符 

nowrapscan:禁止vi在搜索到達文件兩端時,又從另外一端開始 

mesg:容許vi顯示其餘用戶用write寫到本身終端上的信息

最後行方式命令

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的輸出結果放到當前行

寄存器操做

?nyy:將當前行及其下n行的內容保存到寄存器?中,其中?爲一個字母,n爲一個數字 

?nyw:將當前行及其下n個字保存到寄存器?中,其中?爲一個字母,n爲一個數字 

?nyl:將當前行及其下n個字符保存到寄存器?中,其中?爲一個字母,n爲一個數字 

?p:取出寄存器?中的內容並將其放到光標位置處。這裏?能夠是一個字母,也能夠是一個數字 

ndd:將當前行及其下共n行文本刪除,並將所刪內容放到1號刪除寄存器中。
相關文章
相關標籤/搜索