VIM使用不熟練?看完這篇文章,讓你使用VIM效率提高至少一倍! ——《Linux之vim知識詳解》


這裏是一段防爬蟲文本,請讀者忽略。
本文原創首發於CSDN,作者IDYS
博客首頁:https://blog.csdn.net/weixin_41633902/
本文鏈接:https://blog.csdn.net/weixin_41633902/article/details/105711166



- 寫在開頭的話

  • 請記住:實踐是掌握知識的最快方法
  • 如果你只是懷着看看的態度去快速瀏覽文章,而不去認認真真的把文章裏面講的任何一個知識點去實踐一遍,那麼你永遠也掌握不了它
  • 生命不息,折騰不止!

- vim編輯器

- vim編輯器簡介

  • vim編輯器的前身爲vi編輯器
    • vim:vi IMproved
  • vi全稱:Visual Interface

註明:vi編輯器只是一個文本編輯器

  • 文本常見的字符編碼方案有:
    • ASCII,Unicode
  • Unicode編碼的三種具體實現
    • UTF-8:佔用一到四個字節
    • UTF-16:佔用二到四個字節
    • UTF-32:佔用四個字節
  • vim編輯器可以打開並且識別所有的文本文件

註明:不要企圖用vim編輯器打開二進制文件

  • 文本編輯種類
    • 行編輯器:sed
    • 全屏編輯器:nano,vi

- vim的使用

- vim的三種模式

  1. 編輯模式(命令模式)
  2. 輸入模式
  3. 末行模式(底行模式)

vim打開時的默認模式是編輯模式


- vim打開文件的方式

  • vim [OPTION]… FILE…
  • +# : 打開文件後,直接讓光標處於第#行的行首
[xiao@dayuanshuai ~]$ vim +30 /etc/services #使用案例,使用後光標直接定位於該文件的第30行
  • +/PATTERN:打開文件後,直接讓光標處於第一個被PATTERN匹配到的行的行首
[xiao@dayuanshuai ~]$ vim +/tcp /etc/services  #使用案例
  • +: 打開文件後,讓光標處於文件最後一行
[xiao@dayuanshuai ~]$ vim + /etc/services #打開/etc/service文件後,光標處於最後一行

- vim的模式轉換

  1. 編輯模式到輸入模式
  • i:insert,在光標所在處前面輸入
  • a:append,在光標所在處後面輸入
  • o:open,在當前光標所在行的下方打開一個新行
  • I:在當前光標所在行的行首輸入
  • A:在當前光標所在行的行尾輸入
  • O:在當前光標所在行的上方打開一個新行輸入
  • c:
  • C:
  1. 輸入模式到編輯模式
  • 敲擊 ESC
  1. 編輯模式到末行模式
  • 鍵入 :
  1. 末行模式到編輯模式
  • 當末行模式只有一個 :  時,直接鍵入ESC
  • 當末行模式除了 :  之外,還輸入了內容,比如這樣:/s/g,這時鍵入兩次ESC鍵即可

-關閉文件

  • :q 退出

  • :q! 強制退出,丟棄做出的修改

  • :wq 保存退出

  • :x 保存退出

  • :w /PATH/SOMEWHERE

  • 命令模式下鍵入ZZ —— 保存退出


- 光標跳轉

- 字符間跳轉:h,j,k,l

  1. h:左
  2. l: 右
  3. j: 下
  4. k:上
  • #COMMAND:跳轉由#指定個數的字符
#例如
4 h #向左移動四個光標
5 j #向下移動5個光標
6 k #向上移動6行
7 l #向右移動7個光標

- 單詞間跳轉

  1. w  光標跳轉至後一個單詞的詞首
  2. e 光標跳轉至當前單詞或者下一個單詞的詞尾
  3. b 光標跳轉至當前單詞或者前一個單詞的詞首
  • #COMMAND: 跳轉由#指定個數的單詞數
#舉例
3 w		#向後跳轉3個單詞數,並且光標移到單詞首部
4 b		#向前跳轉4個單詞數,並且光標移到單詞首部
5 e		#向後跳轉5個單詞數,並且光標移到單詞尾部

- 行首行尾跳轉

  • ^: 跳轉至行首的第一個非空白字符

  • 0: 跳轉至行首

  • $: 跳轉至行尾

- 行間移動

  • #G:跳轉至由#指定的行

  • G:最後一行

  • 1G,gg:第一行

- 句間移動

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

- 段落間移動

  • }:跳轉至下一段落
  • {:跳轉至上一段落

-vim的編輯命令

字符編輯

  • x:刪除光標處的字符
  • #x:刪除光標處起始的#個字符
  • xp:交換光標所在處的字符及其後面字符的位置

刪除命令

  • d:刪除命令,可結合光標跳轉字符,實現範圍刪除
    • d$
    • d^
    • d0
    • dw
    • de
    • db
    • #COMMAND
# 例子
3,d,e	#刪除當前光標往後至三個單詞詞尾的部分
3,d,w	#刪除當前光標往後三個單詞詞首的部分
4,d,b	#刪除當前光標往前4個單詞詞首的部分
  • dd:刪除光標所在行
    • #COMMAND
  • D:刪除光標所在行的所有字符,但保留該行

粘貼命令

  • 粘貼命令(p,put,paste)
    • p:緩存區存的如果爲整行,則粘貼到當前光標所在行的下方。否則,則粘貼至當前光標所在處的後面
    • P:緩存區存的如果爲整行,則粘貼到當前光標所在行的上方。否則,則粘貼至當前光標所在處的前面

複製命令(y,yank)

  • y:複製,工作行爲相似於d命令
    • y$
    • y0
    • y^
    • ye
    • yw
    • yb
    • #COMMAND
  • yy:複製整行
    • #yy:複製多行

改變命令(c,change)

  • c:修改(類似於d命令,不過比d命令多了一個操作)
    • 執行 c 命令時,會從編輯模式轉爲輸入模式
    • cc:刪除整行,然後轉爲輸入模式
    • c$
    • c^
    • c0
    • ce
    • cw
    • cb
    • #COMMAND

替換命令(r,replace)

  • r:替換光標所在處的字符

- 其他編輯操作

- 可視化命令

  • v:按字符選定

  • V:按行選定

他們經常結合編輯命令使用

d,c,y

- 撤銷此前的編輯

  • u(undo):撤銷此前的操作

  • #u:撤銷指定的次數

- 撤銷此前的撤銷

  • Ctrl+r

- 重複前一個編輯操作

  • .

- 翻屏操作

  • Ctrl+f:向文件尾部翻一屏

  • Ctrl+b:向文件首部翻一屏

  • Ctrl+d:向文件尾部翻半屏

  • Ctrl+u:向文件首部翻半屏


- vim自帶的練習教程(有中文版)

  • vimtutor 輸入該命令,即可進入教程

- vim中的末行模式

  • 內建的命令行接口
  1. 地址定界
  • start_pos,end_pos
    • #:具體第#行,例如2表示第2行
    • #,#:從左側#表示行起始,到右側#表示行結尾
    • #,+#:從左側#表示的行起始,加上右側#表示的行數。如:1,+3
    • $:最後一行
      • .,$-1:當前行開始到最後一行的上一行
    • %:全文,相當於1,$
    • /pat1/,/pat2/:
      • 從第一次被pat1模式匹配到的行開始,一直到第一次被part2匹配到的行結束
      • /pat/,$
    • 使用方式:後跟一個編輯命令
      • d
      • y
      • w /PATH/SOMEWHERE:將範圍內的行另存至指定文件中
      • r /PATH/FROM/SOMEFILE:在指定位置插入指定文件的所有內容
:1,3w ./vim.txt  #將該文本的一到三行保存到當前目錄下的vim.txt文件中
:100r /etc/issue  #在100行上插入/etc/issue的內容
  1. 查找
  • /PATTERN:從當前光標所在處向文件尾部查找
  • ?PATTERN:從當前光標所在處向文件首部查找
    • n:與查找命令方向相同
    • N:與查找命令方向相反
  1. 查找並且替換
  • s:在末行模式下完成查找替換操作
    • s/要查找的內容/替換的內容/修飾符
    • 要查找的內容:可使用模式
    • 替換的內容:不能使用模式,但可以使用/1,/2,/3…等後向引用符號,還可以使用“&”引用前面查找時查找到的整個內容
    • 修飾符:
      • i:忽略大小寫
      • g:全局替換;默認情況下,每一行只替換第一次出現
# 舉例
:.,$s/r\(..\)t/R\1T/g		#.代表單個字符,\1後向引用
:%s/1...x/&er/g		#&引用前面查找時查找到的內容
:1,10s/how/HOW/g  #在第一行到第十行將查找到的how替換爲HOW
:%s\/etc\/fstab/\/var\/log/g
  • 查找替換中的分隔符/可以替換爲其它字符,例如:
    • s@@@
    • s###
:%s@/var/log@/etc/fstab@g  #全局將/var/log替換爲/etc/fatab

- 多文件模式

  • vim FILE1 FILE2 FILE3
    • :next 下一個
    • :prev 前一個
    • :first 第一個
    • :last 最後一個
    • :wall 保存所有
    • :qall 退出所有

- 窗口分隔模式

  • vim -o|-O FILE1 FILE2 …
    • -o:水平分隔
    • -O:垂直分隔
    • 在窗口間切換:Ctrl+w,Arrow

- 單文件窗口分割

  • Ctrl+w,s:split,水平分割
  • Ctrl+w,v:vertical,垂直分割

- 定製vim的工作特性

  • 配置文件:永久有效

    • 全局:/etc/vimrc
    • 個人:~/.vimrc
  • 末行:當前vim進程有效

  1. 行號
  • 顯示:set number,簡寫爲set nu

  • 取消顯示:set nonu

  1. 括號匹配
  • 匹配:set showmatch,簡寫爲set sm
  • 取消:set nosm
  1. 自動縮進
  • 啓用:set ai 全稱爲:auto intent
  • 禁用:set noai
  1. 高亮搜索
  • 啓用:set hlsearch
  • 禁用:set nohlsearch
  1. 語法高亮
  • 啓用:syntax on
  • 禁用:syntax off
  1. 忽略字符大小寫
  • 啓用:set ic

  • 禁用(不忽略):set noic

獲取幫助

  • :help



- 練習題

  1. 複製/etc/grub2.cfg至/tmp/目錄,用查找替換命令刪除/tmp/grub2.cfg文件中的行首的空白字符
#其中一種做法
:%s/^[[:space:]]\+//g
  1. 複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首添加一個#號;
#做法
:%s/^[[:space:]]\+/#&/g
  1. 設置tab縮進爲4個字符
:set tabstop=4
  1. 複製/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;
:%s@/etc/sysconfig/init@/var/log@g  #前面說過可以使用@作爲分隔符,當使用@作爲分隔符/就不需要轉義了
  1. 刪除/tmp/functions文件中所有以#開頭,且#後面至少有一個空白字符的行的行首的#號
:%s@^#\([[:space:]]\+\)@\1@g



- 寫在最後的話:

  • 無論每個知識點的難易程度如何,我都會盡力將它描繪得足夠細緻
  • 歡迎關注我的CSDN博客,IDYS’BLOG
  • 持續更新內容運維 | 網工 | 軟件技巧
  • 如果你有什麼疑問,或者是難題。歡迎評論或者私信我。你若留言,我必回覆!
  • 雖然我現在還很渺小,但我會做好每一篇內容。謝謝關注!


在這裏插入圖片描述

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