Vim文本編輯器

   學習 Linux 命令行,就像要成爲一名造詣很深的鋼琴家一樣,它不是我們一下午就能學會的技能。這需要經歷幾年的勤苦練習。我們將介紹 vi(發音“vee eye”)文本編輯器,它是 Unix 傳統中核心程序之一。 vi 因它難用的用戶界面而有點聲名狼藉,但是當我們看到一位大師坐在鋼琴前開始演奏時,我們的確成了偉大藝術的見證人。雖然我們在這裏不能成爲 vi 大師,當我們學完後,我們會知道怎樣在 vi 中玩“筷子”。

   爲什麼我們應該學習 vi ?

在現在這個圖形編輯器和易於使用的基於文本編輯器的時代,比如說 nano,爲什麼我們還應該學習 vi 呢?下面有三個充分的理由:

vi 很多系統都預裝。如果我們的系統沒有圖形界面,比方說一臺遠端服務器或者是一個 X 配置損壞了的本地系統,那麼 vi 就成了我們的救星。雖然 nano 逐漸流行起來,但是它還沒有普及。POSIX,這套 Unix 系統中程序兼容的標準,就要求系統要預裝 vi。

vi 是輕量級且執行快速的編輯器。對於許多任務來說,啓動 vi 比起在菜單中找到一個圖形化文本編輯器,再等待編輯器數倍兆字節的數據加載而言,要容易的多。

另外,vi 是爲了加快輸入速度而設計的。我們將會看到,當一名熟練的 vi 用戶在編輯文件時,他或她的手從不需要移開鍵盤。

   背景介紹

第一版 vi 是在1976由 Bill Joy 寫成的,當時他是加州大學伯克利分校的學生,後來他共同創建了 Sun 微系統公司。vi 這個名字來源於單詞“visual”,因爲它打算在帶有可移動光標的視頻終端上編輯文本。在發明可視化編輯器之前,有一次只能操作一行文本的行編輯器。爲了指定一個修改,我們告訴行編輯器到一個特殊行並且說明做什麼修改,比方說添加或刪除文本。視頻終端(而不是基於打印機的終端,像電傳打印機)的出現,可視化編輯成爲可能。vi 實際上整合了一個強大的叫做 ex 行編輯器, 所以我們在用vi 時能運行行編輯命令。大多數 Linux 發行版不包含真正的 vi;而是自帶一款高級替代版本,叫vim(它“vi improved”的簡寫)由 Bram Moolenaar 開發的。vim 相對於傳統的 Unix vi 來說,取得了實質性進步。通常,vim 在 Linux 系統中是“vi”的符號鏈接(或別名)。在隨後的討論中,我們將會假定我們有一個叫做“vi”的程序,但它其實是 vim。

Vim 有三種模式類型:編輯模式;輸入模式;末行模式。

   編輯模式:是Vim的默認模式,又叫做命令模式;

   輸入模式:又叫做插入模式;

   末行模式:在命令模式下按下:(英文冒號)就進入了末行命令模式。末行命令模式可以輸入單個或多個字符的命令,可用的命令非常多。

   vim編輯器的使用及格式

      vim [options] [/path/to/somefile]

模式轉換:

編輯模式 --> 輸入模式:

            i:實現在當前光標所在處字符前面轉換爲輸入模式;

            a:實現在當前光標所在處字符後面轉換爲輸入模式;

            o:實現在當前光標所在行的下方新建一個空白行並轉換爲輸入模式;

            I:在當前光標所在行的行首轉爲輸入模式;

            A:在當前光標所在行的行尾轉爲輸入模式;

            O:在當前光標所在行的上方新建一行,並轉爲輸入模式;

輸入模式 --> 編輯模式:

           按下Esc鍵;

編輯模式 --> 末行模式:

           鍵入:(英文冒號)

末行模式 --> 編輯模式:

           Esc,Esc (連續按兩次)

光標跳轉:

   字符間跳轉:

按鍵移動光標
h
向左移動,同左箭頭效果
l向右移動,同右箭頭效果
j向下移動,同下箭頭效果
k向上移動,同上箭頭效果

   字符間多字符跳轉:

             # 可與上面字符組合使用,表示向某方向移動#個字符

按鍵移動光標
#h向左側跳轉#個字符
#l向右側跳轉#個字符
#j向下面跳轉#個字符
#k向上面跳轉#個字符

              如:6h表示向左跳轉6個字符;6表示向右跳轉6個字符。

   單詞間跳轉:

w跳轉至後一個單詞的詞首
e跳至當前或下一個單詞詞尾
b跳至當前或前一個單詞詞首

   句子間跳轉:

)
跳轉至下一句
(跳轉至上一句

   段落間跳轉:

}
跳轉至下一段
{跳轉至前一段

   行間跳轉:

1G, gg跳轉至行首注:1G中1表示數字1
G跳轉至行尾
#G跳轉至#行注: #號表示數字序號

   行內跳轉:

^跳轉至行首的第一個非空白字符
$絕對行尾
0絕對行首注: 0爲數字0

   打開文件

       格式: vim [options] /path/to/file

             vim +# /path/to/file

             如: vim +8 /etc/init.d/functions 表示打開指定文件並跳轉至第#行

   打開多個文件:

       格式: vim [options] /path/to/file /path/to/file

             如: vim /etc/init.d/functions /etc/fstab 表示打開指定多個文件

            注: 輸入前需轉換至末行模式:

next跳轉至下一個打開文件
prev跳轉至上一個打開文件
first跳轉至第一個打開文件
last跳轉至最後一個打開文件
-O垂直分割窗口
-o水平分割窗口

         如: vim -O /etc/init.d/functions /etc/fstab 垂直分割窗口

wKiom1NCaD2QFk3eAAPfbVuSiFc140.jpg

   關閉文件:

       注: 輸入前需轉換至末行模式:

w
保存
q退出
!
強制
wq保存退出
q!強制退出
x保存退出

       在編輯模式下:

ZZ保存退出
wall保存所有
qall退出所有
wqall
保存退出所有

編輯命令

刪除命令: d

x
刪除單個字符
#x
刪除光標所在處後面#個字符
dw
刪除單詞至下個單詞詞首
de
刪除光標所在處的後的一個單詞
db
刪除光標所在處的前的一個單詞
d^
刪除光標所在處至行首的內容
d$
刪除光標所在處至行尾的內容
dd
刪除光標所在行
#dd
刪除光標所在行及向下#行

在末行模式下使用d命令
            末行模式支持範圍指定、地址定界

                   格式: 起始地址,結束地址

$最後一行
.當前光標所在行
%全文

      如: 1,7d 表示刪除第1至7行
          1,$ 表示第1行至最後一行

在地址定界時還支持相對錶達法

      如: 1,+6 表示從第1行開始往下6行,即包括第1行在內共7行
          1,$-2 表示從第1行開始至第倒數3行
          .,+3  表示從當前行開始往下3行,即包括第1行在內共4行

編輯操作可撤銷:(在未保存之前)

         vim默認會最近50次的操作,u命令可逐一撤消此前的編輯操作

u
逐一撤消此前的編輯操作注:需在編輯模式下使用
Ctrl+r
撤消此前的撤消與u選項相反

粘貼操作: p

刪除的是整行刪除的不是整行
p
p:小寫 在當前光標所在行的下方粘貼
p
p:小寫 在當前光標所在處字符的後方粘貼
P
P:大寫 在當前光標所在行的上方粘貼P
P:大寫 在當前光標所在處字符的前方粘貼

複製操作: y

yy
複製當前光標所在行
#yy
複製當前光標所在向下#行
y^
複製當前光標處至行首
y$
複製當前光標處至行尾
複製的是整行複製的不是整行
p
p:小寫 在當前光標所在行的下方粘貼p
p:小寫 在當前光標所在處字符的後方粘貼
P
P:大寫 在當前光標所在行的上方粘貼P
P:大寫 在當前光標所在處字符的前方粘貼

文本搜索:

   文件搜索查找支持正則表達式匹配

   如:/\<d[[:alpha:]]\{2\}n\> 字母d後有兩個字母后跟n的單詞

/keyword從當前光標所在處向文件尾部查找
?keyword:從當前光標所在處向文件首部查找
n
下一個,跟查找命令相同的方向
N
前一個,跟查找命令相反的方向

翻屏快捷鍵:

Ctrl+f向文件尾部翻一屏
Ctrl+b向文件首部翻一屏
Ctrl+d向文件尾部翻半屏
Ctrl+u向文件首部翻半屏


另外一種編輯命令

c
編輯,轉換至輸入模式
cc
刪除所在行內容並且轉換爲輸入模式
#cc
刪除#行內容並轉換爲輸入模式
c^
刪除至行首的第一個非空白字符處並轉換爲輸入模式
c$
刪除所在行內容到行尾並轉換爲輸入模式
c0
刪除至行首並轉換爲輸入模式

vim可視化模式
     visual模式

          v:選中光標劃過的字符

          V:選中光標劃過的行,整行選取

          按兩下“Esc”鍵回到編輯模式

同一文檔窗口分割:
         Ctrl+w 再按s水平分割文件
         Ctrl+w 再按v垂直分割文件

         Ctrl+w 再按箭頭選擇文件

窗口屬性定義:

      set nu    :顯示行號

      set nonu  :取消顯示行號

      set ai    :自動縮進

      set noai  :取消自動縮進

      set ic    :不區分字符大小寫

      set noic  :取消不區分字符大小寫

      set sm    :顯示匹配的括號

      set nosm  :取消顯示匹配的括號

      syntax on :語法着色

      syntax off     :取消語法着色

      set nohlsearch :取消高亮顯示

vim的配置文件:
        全局:/etc/vimrc  
只有管理員有權限修改配置,
修改後對所有用戶有效

        個人:~/.vimrc 此文件實際不存在,自己創建即可。修改後只對當前用戶有效

        由於shell只對當前用戶有效,重啓後將無效。所以需要修改配置文件

全局查找和替代

   末行模式下:

           地址定界s/查找模式/替換成的內容/gi

           地址定界s@查找模式@替換成的內容@gi

               例:某個文檔"/dev/null"替換爲"/tmp/a.txt"

                  %s/\/dev\/null/\/tmp\/a.txt/g

                  %s@/dev/null@/tmp/a.txt@g

   我們把這個命令分解爲幾個單獨的部分,看一下每部分的含義

條目含義
:
冒號字符運行一個 ex 命令
%
指定要操作的行數。% 是一個快捷方式,表示從第一行到最後一行。或者用 1,$ 來代替,意思是 “ 從第一行到文件的最後一行。” 如果省略了文本行的範圍,那麼操作只對當前行生效。
s
指定操作。在這種情況下是,替換(查找與替代
/Line/line查找類型與替代文本
g
這是“全局”的意思,意味着對文本行中所有匹配的字符串執行查找和替換操作。如果省略 g,則 只替換每個文本行中第一個匹配的字符串。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章