Linux 學(xué)習(xí)筆記(五):Vim 快速入門

一贷盲、Vim 模式介紹

  • 普通模式(Normal mode)

    在普通模式中葱蝗,用的編輯器命令,比如移動(dòng)光標(biāo)掉伏,刪除文本等等缝呕。這也是Vim啟動(dòng)后的默認(rèn)模式。這正好和許多新用戶期待的操作方式相反(大多數(shù)編輯器默認(rèn)模式為插入模式)斧散。

    Vim強(qiáng)大的編輯能來自于其普通模式命令供常。普通模式命令往往需要一個(gè)操作符結(jié)尾。例如普通模式命令 dd 刪除當(dāng)前行鸡捐,第一個(gè)"d"的后面可以跟另外的移動(dòng)命令來代替第二個(gè)"d"栈暇,比如用移動(dòng)到下一行的"j"鍵就可以刪除當(dāng)前行和下一行。另外還可以指定命令重復(fù)次數(shù)闯参,2dd(重復(fù)dd兩次)瞻鹏,和 dj 的效果是一樣的。在學(xué)習(xí)了各種各樣的文本間移動(dòng) 跳轉(zhuǎn)的命令和其他的普通模式的編輯命令鹿寨,并且能夠靈活組合使用的話新博,能夠比那些沒有模式的編輯器更加高效地進(jìn)行文本編輯。

  • 插入模式(Insert mode)

    在這個(gè)模式中脚草,大多數(shù)按鍵都會(huì)向文本緩沖中插入文本赫悄。大多數(shù)新用戶希望文本編輯器編輯過程中一直保持這個(gè)模式。

  • 可視模式(Visual mode)

    這個(gè)模式與普通模式比較相似馏慨。但是移動(dòng)命令會(huì)擴(kuò)大高亮的文本區(qū)域埂淮。高亮區(qū)域可以是字符、行或者是一塊文本写隶。當(dāng)執(zhí)行一個(gè)非移動(dòng)命令時(shí)倔撞,命令會(huì)被執(zhí)行到這塊高亮的區(qū)域上。Vim 的"文本對象"也能和移動(dòng)命令一樣用在這個(gè)模式中慕趴。

  • 選擇模式(Select mode)

    這個(gè)模式和無模式編輯器的行為比較相似(Windows標(biāo)準(zhǔn)文本控件的方式)痪蝇。這個(gè)模式中鄙陡,可以用鼠標(biāo)或者光標(biāo)鍵高亮選擇文本,不過輸入任何字符的話躏啰,Vim會(huì)用這個(gè)字符替換選擇的高亮文本塊趁矾,并且自動(dòng)進(jìn)入插入模式。

  • 命令行模式(Command line mode)

    在命令行模式中可以輸入會(huì)被解釋成并執(zhí)行的文本给僵。例如執(zhí)行命令(:鍵)毫捣,搜索(/?鍵)或者過濾命令(!鍵)。在命令執(zhí)行之后帝际,Vim返回到命令行模式之前的模式蔓同,通常是普通模式。

  • Ex模式(Ex mode)

    這和命令行模式比較相似蹲诀,在使用 :visual 命令離開Ex模式前牌柄,可以一次執(zhí)行多條命令。

  • 三種常用模式的切換

    以上六種模式我們常用到就是普通模式侧甫、插入模式和命令行模式。

    vim 啟動(dòng)進(jìn)入普通模式蹋宦,處于插入模式或命令行模式時(shí)只需要按 Esc 或者
    Ctrl+[ 即可進(jìn)入普通模式披粟。普通模式中按 i(插入)或 a(附加)鍵都可以進(jìn)入插入模式,普通模式中按 : 進(jìn)入命令行模式冷冗。命令行模式中輸入 wq 回車后保存并退出 vim守屉。

二、Vim 編輯器的基本操作

  • 進(jìn)入 Vim

    vim 后面加上你要打開的已存在的文件名或者不存在(則作為新建文件)的文件名蒿辙。

      vim practice_1.txt
    

    直接使用vim也可以打開vim編輯器拇泛,但是不會(huì)打開任何文件。

      vim
    

    進(jìn)入命令行模式后輸入 :e 文件路徑 同樣可以打開相應(yīng)文件思灌。

  • 游標(biāo)移動(dòng)

    在普通模式下俺叭,使用方向鍵或者h(yuǎn),j,k,l鍵可以移動(dòng)游標(biāo)。

    按鍵 說明
    h
    l
    j
    k
    w 移動(dòng)到下一個(gè)單詞
    b 移動(dòng)到上一個(gè)單詞
  • 進(jìn)入插入模式

    在普通模式下使用下面的鍵將進(jìn)入插入模式泰偿,并可以從相應(yīng)的位置開始輸入熄守。

    命令 說明
    i 在當(dāng)前光標(biāo)處進(jìn)行編輯
    I 在行首插入
    A 在行末插入
    a 在光標(biāo)后插入編輯
    o 在當(dāng)前行后插入一個(gè)新行
    O 在當(dāng)前行前插入一個(gè)新行
    cw 替換從光標(biāo)所在位置后到一個(gè)單詞結(jié)尾的字符
  • 命令行模式下保存文檔

    從普通模式輸入 : 進(jìn)入命令行模式,輸入 w 并回車耗跛,保存文檔裕照。輸入 :w 文件名 可以將文檔另存為其他文件名或存到其它路徑下。

  • 命令行模式下退出 vim

    從普通模式輸入 : 進(jìn)入命令行模式调塌,輸入 wq 回車晋南,保存并退出編輯。

    以下為其它幾種退出方式:

    命令 說明
    :q! 強(qiáng)制退出羔砾,不保存
    :q 退出
    :wq! 強(qiáng)制保存并退出
    :w <文件路徑> 另存為
    :saveas <文件路徑> 另存為
    :x 保存并退出
    :wq 保存并退出
  • 普通模式下退出 vim

    普通模式下鍵入 Shift+zz 即可保存退出 vim 负间。

  • 普通模式下刪除 vim 文本信息

    進(jìn)入普通模式偶妖,使用下列命令可以進(jìn)行文本快速刪除:

    命令 說明
    x 刪除游標(biāo)所在的字符
    X 刪除游標(biāo)所在前一個(gè)字符
    Delete 刪除游標(biāo)所在的字符
    dd 刪除整行
    dw 刪除一個(gè)單詞(英文)
    d$或D 刪除至行尾
    d^ 刪除至行首
    dG 刪除到文檔結(jié)尾處
    d1G 刪至文檔首部

    除此之外,在命令之前加上數(shù)字唉擂,表示一次刪除多行餐屎,如:2dd 表示一次刪除2行。

三玩祟、 Vim 文本編輯命令

  • 重復(fù)執(zhí)行上次命令

    在普通模式下 . (小數(shù)點(diǎn))表示重復(fù)上一次的命令操作

  • 執(zhí)行指定次數(shù)相同的命令

    進(jìn)入普通模式輸入 N<command> 腹缩,N 表示重復(fù)后面的次數(shù),

    在普通模式下空扎,你還可以使用 dw 或者 daw (delete a word)刪除一個(gè)單詞藏鹊,dnw (n替換為相應(yīng)數(shù)字) 表示刪除n個(gè)單詞。

  • 使用命令進(jìn)行快速調(diào)整縮進(jìn)操作

    縮進(jìn)操作均在普通模式下有效

    • 普通模式下輸入 >> 整行將向右縮進(jìn)(用于格式化代碼)
    • 普通模式下輸入 << 整行向左回退
  • 行間跳轉(zhuǎn)

    如果默認(rèn)沒有顯示行號转锈,請先進(jìn)入命令模式盘寡,輸入 :set nu 以顯示行號

    命令 說明
    nG(n Shift+g) 游標(biāo)移動(dòng)到第 n 行
    gg 游標(biāo)移動(dòng)到到第一行
    G(Shift+g) 到最后一行

    小技巧:你在完成依次跳轉(zhuǎn)后,可以使用 Ctrl+o 快速回到上一次(跳轉(zhuǎn)前)光標(biāo)所在位置

  • 行內(nèi)跳轉(zhuǎn)

    普通模式下使用下列命令在行內(nèi)按照單詞為單位進(jìn)行跳轉(zhuǎn)

    命令 說明
    w 到下一個(gè)單詞的開頭
    e 到當(dāng)前單詞的結(jié)尾
    b 到前一個(gè)單詞的開頭
    ge 到前一個(gè)單詞的結(jié)尾
    0或^ 到行頭
    $ 到行尾
    f<字母> 向后搜索<字母>并跳轉(zhuǎn)到第一個(gè)匹配的位置
    F<字母> 向前搜索<字母>并跳轉(zhuǎn)到第一個(gè)匹配的位置
    t<字母> 向后搜索<字母>并跳轉(zhuǎn)到第一個(gè)匹配位置之前的一個(gè)字母(不常用)
    T<字母> 向前搜索<字母>并跳轉(zhuǎn)到第一個(gè)匹配位置之后的一個(gè)字母(不常用)
  • 復(fù)制及粘貼文本

    普通模式中使用y復(fù)制撮慨,使用 p 粘貼竿痰。

    命令 說明
    yy 復(fù)制游標(biāo)所在的整行( 3yy 表示復(fù)制3行)
    y^ 復(fù)制至行首,或 y0(不含光標(biāo)所在處字符)
    y$ 復(fù)制至行尾(含光標(biāo)所在處字符)
    yw 復(fù)制一個(gè)單詞( y2w 復(fù)制兩個(gè)單詞)
    yG 復(fù)制至文本末
    y1G 復(fù)制至文本開頭
    p 代表粘貼至光標(biāo)后(下)
    P 代表粘貼至光標(biāo)前(上)
  • 剪切及粘貼

    其實(shí) dd 刪除命令就是剪切砌溺,你每次 dd 刪除文檔內(nèi)容后影涉,便可以使用 p 來粘貼,也這一點(diǎn)可以讓我們實(shí)現(xiàn)一個(gè)很爽快的功能——交換上下行ddp

四规伐、查找與替換

  • 替換和撤銷(Undo)命令

    替換和Undo命令都是針對普通模式下的操作

    命令 說明
    r+<待替換字母> 將游標(biāo)所在字母替換為指定字母
    R 連續(xù)替換蟹倾,直到按下 Esc
    cc 替換整行,即刪除游標(biāo)所在行猖闪,并進(jìn)入插入模式
    cw 替換一個(gè)單詞鲜棠,即刪除一個(gè)單詞,并進(jìn)入插入模式
    C 替換游標(biāo)以后至行末
    ~ 反轉(zhuǎn)游標(biāo)所在字母大小寫
    u{n} 撤銷一次或n次操作
    U 撤銷當(dāng)前行的所有修改
    Ctrl+r redo培慌,即撤銷undo的操作
  • shiftwidth 命令

    shiftwidth 命令是指 >> 命令產(chǎn)生的縮進(jìn)(可以簡寫成 sw ) 普通模式下輸入:進(jìn)入命令行模式下對 shiftwidth 值進(jìn)行設(shè)置可以控制縮進(jìn)和回退的字符數(shù)豁陆。

    獲取目前的設(shè)定值 :set shiftwidth?

    設(shè)置縮進(jìn)為10個(gè)字符 :set shiftwidth=10

  • 調(diào)整文本位置

    命令行模式下輸入 :ce (center)命令使本行內(nèi)容居中

    命令行模式下輸入 :ri (right)命令使本行文本靠右

    命令行模式下輸入 :le (left) 命令使本行內(nèi)容靠左

  • 快速查找

    使用 vim 打開文件進(jìn)行編輯(搜索高亮需在配置文件 .vimrc 中設(shè)置 set hls

    • 普通模式下輸入 /icmp 然后回車即可查找字符串 icmp
    • 普通模式下輸入 n 查找下一個(gè) icmp
    • 普通模式下輸入 ?tcp 向上查找字符串 tcp
    • 普通模式下輸入 N 查找上一個(gè)出現(xiàn)的 tcp
    • 命令行模式下輸入 noh 然后回車即可取消搜索
  • 高級查找

    • 普通模式下輸入 \* 尋找游標(biāo)所在處的單詞
    • 普通模式下輸入 \# 同上吵护,但 \# 是向前(上)找献联,\* 則是向后(下)找
    • 普通模式下輸入 g\*\* ,但部分符合該單詞即可
    • 普通模式下輸入 g\#\#何址,但部分符合該單詞即可
    • 以上查找 n,N 的繼續(xù)查找命令依然可以用

五里逆、Vim 高級功能入門

  • 使用 vim 編輯多個(gè)文件

    編輯多個(gè)文件有兩種形式,一種是在進(jìn)入 vim 前使用的參數(shù)就是多個(gè)文件用爪。另一種就是進(jìn)入 vim 后再編輯其他的文件原押。默認(rèn)進(jìn)入第一個(gè)文件的編輯界面

    • 命令行模式下輸入 :n 編輯下一個(gè)文件,可以加 !:n! 強(qiáng)制切換偎血,之前一個(gè)文件的輸入沒有保存诸衔,僅僅切換到另一個(gè)文件盯漂。
    • 命令行模式下輸入 :N 編輯上一個(gè)文件,可以加 !:N! 強(qiáng)制切換笨农,之前文件內(nèi)的輸入沒有保存就缆,僅僅是切換到另一個(gè)文件。
  • 進(jìn)入 vim 后打開新文件

    • 命令行模式下輸入 :e 3.txt 打開新文件 3.txt
    • 命令行模式下輸入 :e# 回到前一個(gè)文件
    • 命令行模式下輸入 :ls 可以列出以前編輯過的文檔
    • 命令行模式下輸入 :b 2.txt(或者編號)可以直接進(jìn)入文件 2.txt 編輯
    • 命令行模式下輸入 :bd 2.txt(或者編號)可以刪除以前編輯過的列表中的文件項(xiàng)目
    • 命令行模式下輸入 :e! 4.txt 谒亦,新打開文件 4.txt竭宰,放棄正在編輯的文件
    • 命令行模式下輸入 :f 顯示正在編輯的文件名
    • 命令行模式下輸入 :f new.txt ,改變正在編輯的文件名字為 new.txt
  • 恢復(fù)文件

    如果因?yàn)閿嚯姷仍蛟斐晌臋n沒有保存份招,可以采用恢復(fù)方式切揭,vim -r 進(jìn)入文檔后,輸入 :ewcover 1.txt 來恢復(fù)

  • 可視模式命令簡介

    • 在普通模式下輸入 v(小寫)锁摔,進(jìn)入字符選擇模式廓旬,就可以移動(dòng)光標(biāo),光標(biāo)走過的地方就會(huì)選取谐腰。再次按下v后就會(huì)取消選取孕豹。
    • 在普通模式下輸入 Shift+v(小寫),進(jìn)入行選擇模式十气,按下 V 之后就會(huì)把整行選取巩步,您可以上下移動(dòng)光標(biāo)選更多的行,同樣桦踊,再按一次 Shift+v 就可以取消選取。
    • 在普通模式下輸入 Ctrl+v(小寫)终畅,這是區(qū)域選擇模式籍胯,可以進(jìn)行矩形區(qū)域選擇,再按一次 Ctrl+v 取消選取离福。
    • 在可視模式下輸入 d 刪除選取區(qū)域內(nèi)容
    • 在可視模式下輸入 y 復(fù)制選取區(qū)域內(nèi)容
  • 視窗操作簡介

    vim 可以在一個(gè)界面里打開多個(gè)窗口進(jìn)行編輯杖狼,這些編輯窗口稱為 vim 的視窗。 打開方法有很多種妖爷,例如可以使用在命令行模式下輸入 :new 打開一個(gè)新的 vim 視窗蝶涩,并進(jìn)入視窗編輯一個(gè)新文件(普通模式下輸入 Ctrl+w 也可以),除了 :new 命令絮识,下述列舉的多種方法也可以在命令模式或普通模式下打開新的視窗:

    • 命令行模式下輸入 :sp 1.txt 打開新的水平分屏視窗來編輯 1.txt
    • 命令行模式下輸入 :vsp 2.txt 打開新的垂直分屏視窗來編輯 2.txt
    • 普通模式下 Ctrl+ws 將當(dāng)前窗口分割成兩個(gè)水平的窗口
    • 普通模式下 Ctrl+wv 將當(dāng)前窗口分割成兩個(gè)垂直的窗口
    • 普通模式下 Ctrl+wq:q 結(jié)束分割出來的視窗绿聘。如果在新視窗中有輸入需要使用強(qiáng)制符 !:q!
    • 普通模式下 Ctrl+wo 打開一個(gè)視窗并且隱藏之前的所有視窗
    • 普通模式下 Ctrl+wj 移至下面視窗
    • 普通模式下 Ctrl+wk 移至上面視窗
    • 普通模式下 Ctrl+wh 移至左邊視窗
    • 普通模式下 Ctrl+wl 移至右邊視窗
    • 普通模式下 Ctrl+wJ 將當(dāng)前視窗移至下面
    • 普通模式下 Ctrl+wK 將當(dāng)前視窗移至上面
    • 普通模式下 Ctrl+wH 將當(dāng)前視窗移至左邊
    • 普通模式下 Ctrl+wL 將當(dāng)前視窗移至右邊
    • 普通模式下 Ctrl+w- 減小視窗的高度
    • 普通模式下 Ctrl+w+ 增加視窗的高度
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市次舌,隨后出現(xiàn)的幾起案子熄攘,更是在濱河造成了極大的恐慌,老刑警劉巖彼念,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挪圾,死亡現(xiàn)場離奇詭異浅萧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哲思,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門洼畅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棚赔,你說我怎么就攤上這事帝簇。” “怎么了忆嗜?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵己儒,是天一觀的道長。 經(jīng)常有香客問我捆毫,道長闪湾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任绩卤,我火速辦了婚禮途样,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘濒憋。我一直安慰自己何暇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布凛驮。 她就那樣靜靜地躺著裆站,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黔夭。 梳的紋絲不亂的頭發(fā)上宏胯,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音本姥,去河邊找鬼肩袍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛婚惫,可吹牛的內(nèi)容都是我干的氛赐。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼先舷,長吁一口氣:“原來是場噩夢啊……” “哼艰管!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒋川,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蛙婴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體街图,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浇衬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了餐济。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耘擂。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖絮姆,靈堂內(nèi)的尸體忽然破棺而出醉冤,到底是詐尸還是另有隱情,我是刑警寧澤篙悯,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布蚁阳,位于F島的核電站,受9級特大地震影響鸽照,放射性物質(zhì)發(fā)生泄漏螺捐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一矮燎、第九天 我趴在偏房一處隱蔽的房頂上張望定血。 院中可真熱鬧,春花似錦诞外、人聲如沸澜沟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茫虽。三九已至,卻和暖如春既们,著一層夾襖步出監(jiān)牢的瞬間濒析,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工贤壁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埠忘。 一個(gè)月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓脾拆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莹妒。 傳聞我的和親對象是個(gè)殘疾皇子名船,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 1.一級目錄1.1二級目錄1.1.1三級目錄 一、實(shí)驗(yàn)介紹 1.1 實(shí)驗(yàn)內(nèi)容 本次實(shí)驗(yàn)將學(xué)習(xí)vim中的不同模式和一...
    粵川閱讀 267評論 0 1
  • 命令歷史 以:和/開頭的命令都有歷史紀(jì)錄旨怠,可以首先鍵入:或/然后按上下箭頭來選擇某個(gè)歷史命令渠驼。 啟動(dòng)vim 在命令...
    im螞蟻閱讀 30,734評論 3 48
  • dpkg 學(xué)習(xí) 安裝mysql apt-get install mysql-server-5.6 apt-get ...
    sharonji閱讀 434評論 0 0
  • 朋友說我的音樂播放器里都是些老掉牙的歌曲迷扇,我當(dāng)時(shí)很想說你找找有幾首新近的音樂的百揭,后來想想算了,也沒什么好反駁...
    gulonghaoyue閱讀 179評論 0 0
  • 那些去了遠(yuǎn)方的人蜓席,比遠(yuǎn)方更遠(yuǎn)器一,是內(nèi)省中的異國他鄉(xiāng),遙遠(yuǎn)厨内,遼闊祈秕,光明,安靜雏胃,又深邃黑暗请毛,永恒緘默,永無回還瞭亮,笑容烙在...
    咸叔說閱讀 192評論 0 0