第四章 Linux文本編輯VIM

文本編輯工具介紹

  • vi:Visual Interface,文本編輯器
  • 文本:ASCII,Unicode
  • 文本編輯種類:
    • 行編輯器:sed
    • 全屏編輯器:nano,vi
    • vim -Vi Improved
  • 其他編輯器:
    • gedit 一個簡單的圖形編輯器
    • gvim 一個Vim編輯器的圖形版本

文本編輯工具vim

打開文件

  • vim [OPTION]… FILE…
    • vim +# :打開文件後,讓光標處於第#行,單獨+ 默認光標處於行尾
    • vim +/PATTERN 讓光標處於第一個被PATTERN匹配的行的行首
    • vim -b file 二進制方式打開文件
    • vim -d file1 file2… 比較多個文件(擴展命令模式:使用qall退出)
    • vim -R file 只讀的方式打開文件,如要保存(使用擴展命令模式:wq!
  • vim -e fileex file 直接進入ex模式
  • 如果該文件存在,文件被打開並顯示內容,如果該文件不存在,當編輯後第一次存盤時創建它

vim的三種模式

在這裏插入圖片描述

  • vim:一個模式編輯器
  • 擊鍵行爲是依賴於vim的“模式”
  • 三種主要模式:
    • 命令(Normal)模式:默認模式,移動光標,剪切/粘貼文本
    • 插入(Insert)或編輯模式:修改文本
    • 擴展命令(etended command)模式:保存,退出等
  • Esc鍵 退出當前模式
  • Esc鍵 Esc鍵 總是返回到命令模式

命令模式

  • 字符間跳轉
    • h:向左
    • j:向下
    • k:向上
    • l:向右
    • #COMMAND:數字+命令 由#指定一次跳轉的字符數(例3h:向左跳三個字符)
  • 單詞間跳轉:
    • w: 下一個單詞的詞首
    • e:當前或下一個單詞的詞尾
    • b:當前或前一個單詞的詞首
    • #COMMAND:數字+命令 由#指定一次跳轉的單詞數(例3w:下3個單詞的詞首)
  • 當前頁跳轉
    • H:頁首
    • M:頁中間行
    • L:頁底
    • zt:將光標所在當前行移動到屏幕頂端
    • zz:將光標所在當前行移動到屏幕中間
    • zb:將光標所在當前行移動到屏幕底端
  • 行首行尾跳轉:
    • ^ 跳轉至行首的第一個非空白字符
    • 0 數字0跳轉至行首
    • $ 跳轉至行尾
  • 行間移動:
    • #G 或者擴展命令模式下:#(跳轉至第#行)
    • G 最後一行
    • 1Ggg 第一行
  • 句間移動(由.隔開的算句子):
    • ) 下一句 (上一句
  • 段落間移動(中間由空行算段落):
    • } 下一段 { 上一段
  • 替換命令(r,replace)
    • r 替換光標所在處的字符(r 需要的字符)
    • R 切換成REPLACE模式(R 連續替換)
  • 字符編輯
    • x 刪除光標處的字符
    • #x 刪除光標處起始的#個字符
    • xp 交換光標所在處的字符及其後面字符的位置(x 剪切,p粘貼)
    • ~ 轉換大小寫
    • J 刪除當前行後的換行符
  • 刪除命令(d, delet):
    • d 刪除命令,可結合光標跳轉字符,實現範圍刪除
    • d$ 刪除到行尾
    • d^ 刪除到非空 行首
    • d0 刪除到行首
    • dw 刪除到下一個單詞的詞首
    • de 刪除到下一個單詞的詞尾
    • db 刪除到當前或前一個單詞的詞首
    • dd #COMMAND 刪除#個COMMAND(COMMAND是上面的跳轉,移動命令)
    • dd:刪除光標所在的行
      • #dd 多行刪除(連續刪除#行)
    • D:從當前光標位置一直刪除到行尾,等同於d$
  • 複製命令(y,yank)
    • y 複製,行爲相似於d命令
    • y$ 從光標位置複製到行尾
    • y0 從光標位置複製到行首
    • y^ 從光標位置複製到當前行第一個非空白字符
    • ye 從光標位置複製到下一個單詞尾部
    • yw 從光標位置複製到下一個單詞首部
    • yb 從光標位置複製到上一個或本單詞的首部
    • #COMMAND
    • yy:複製行
      • #yy 複製多行
    • Y:複製整行
  • 粘貼命令(p,paste):
    • p 緩衝區的如果爲整行(有換行符),則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的後面
    • P 緩衝區存的如果爲整行,則粘貼當前光標所在行的上方;否則,則粘貼至當前光標所在處的前面
  • 改變命令(c,change)
    • c:修改後切換成插入模式
    • 命令模式 — > 插入模式
      • c$
      • c^
      • c0
      • cw
      • ce
      • cb
      • #COMMAND
    • cc:刪除當前行並輸入新內容,相當於S
      • #cc
    • C:刪除當前光標到行尾,並切換成插入模式
  • 100iwang [esc] 粘貼“wang”100次
  • 常見COMMAD
    • y複製,d刪除,gU變大寫,gu變小寫
    • 例如:0y$命令
      • 0 ->先到行頭
      • y ->從這裏開始拷貝
      • $ ->拷貝到本行最後一個字符
  • di"光標在“光標”之間,則刪除""之間的內容
  • yi( 光標在()之間,則複製()之間的內容
  • vi[ 光標在[]之間,則選中[]之間的內容
  • dtx 刪除字符直到遇見光標之後的第一個x字符(x是26個字符之間)
  • ytx 複製字符直到遇見光標之後的第一個x字符(x是26個字符之間)
  • ZZ: 保存退出
  • ZQ: 不保存退出

命令模式翻屏操作

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

插入模式

  • i : 當前光標位置開始編輯
  • a:當前光標的後一個位置開始編輯
  • o:當前光標行下面新建空行編輯
  • I: 當前光標所在行的行首開始編輯
  • A:當前光標所在行的行尾開始編輯
  • O: 當前光標所在行的上邊新建一個空行開始編輯

擴展命令模式

  • 使用英文的:打開
  • :q:保存
  • :w:保存
  • :wq:保存退出
  • :q!:強制退出
  • :x :保存退出
  • :r filename 讀文件內容到當前文件中
  • :w filename : 將當前文件內容寫入到另一個文件中
  • :! command:執行Linux命令,回車返回編輯文件
  • :r! command: r(read)讀取Linux運行結果到光標下邊新建一行
  • 地址定界:
    • :start_pos,end_pos
    • :# 具體第#行,例如:2表示第2行
    • :#,# 從左側#表示起始行,到右側#表示結尾行
    • #,+#從左側#表示的起始行,加上右側#表示的行數
      • 例如: 2,+3 表示2到5行
    • . 當前行
    • $最後一行
      • .,$-1 當前行到倒數第二行
    • % 全文,相當於1,$
    • /pattern/匹配pattern的行
    • /par1/,/pat2/
      • 從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束
      • #,/pat/
      • /pat/,%
    • 使用方式:後跟一個編輯命令
      • d: 刪除,例如:.d 刪除當前行;:.,10 d 刪除當前行到第10行
      • y:複製,同上類似
      • w file : 將範圍內的行另存到指定文件
      • r file: 在指定位置插入指定文件的所有內容
  • 查找
    • /pattern:從當前光標所在處向文件尾部查找
    • ?pattern:從當前光標所在處向文件首部查找
    • n:與命令同方向搜索
    • N: 與命令反方向搜索
  • 撤銷更改
    • u: 撤銷最近的更改
    • #u: 撤銷之前的多次更改
    • U: 撤銷光標落在這行後所有此行的更改
    • Ctrl -r:重作最後的“撤銷”更改
    • .:重複前一個操作
    • #.:重複前一個操作#次
  • 替換
    • 在擴展命令模式下完成查找替換操作
      • 格式:s/要查找的內容/替換爲的內容/修飾符
      • 要查找的內容:可使用模式
      • 替換爲的內容:不能使用模式,但可以使用\1,\2,…等後向引用符號;還可以使用"&"引用前面查找時查找到的整個內容
      • 修飾符:
        • i忽略大小寫
        • g 全局替換,默認情況下,每一行只替換第一次出現
        • gc全局替換,每次替換前詢問
    • 查找替換中的分隔符/可替換爲其他字符
      • s@/etc@/var@g
      • s#/boot#/#i

vim的寄存器

  • 有26個命名寄存器和1個無命名寄存器,常存放不同的剪貼板內容,可以不同會話間共享
  • 寄存器名稱a,b,…z,格式:"寄存器 放在數字和命令之間”
    • 如:3"tyy 表示複製3行到t寄存器中
    • "tp表示將t寄存器內容粘貼
  • 未指定,將使用無命名寄存器
  • 有10個數字寄存器,用0,1,…9表示,0存放最近復內容,1存放最近刪除內容。當新的文本變更和刪除時,1轉存到2,2轉存到3,以此類推。數字寄存器不能再不同會話間共享

標記和宏(macro)

  • ma :將當前位置標記爲a,26個字母均可做標記,mb,mc等等
  • 'a:跳轉到a標記的位置,實用的文檔內標記方法,文檔中跳躍編輯時很有用
  • qa:錄製宏a,a爲宏的名稱
  • q:停止錄製宏
  • @a:執行宏a
  • @@:重新執行上次執行的宏

編輯二進制文件

  • 以二進制方式打開文件
    • vim -b binaryfile
  • 擴展命令模式下,利用xxd命令轉換爲可讀的十六進制
    • :%!xxd
  • 插入模式下,編輯二進制文件
  • 擴展命令模式下,利用xxd命令轉換回二進制文件
    • :%!xxd -r
  • 保存退出

可視化模式

  • 允許選擇文本塊
    • v 面向字符
    • V 面向行
    • Ctrl -v 面向塊
  • 可視化鍵可用於與移動鍵結合使用
    • w ) } 箭頭等
  • 突出顯示的文字可被刪除,複製,變更,過濾,收索,替換等

vim -o file1 file2 :打開兩個文件

使用多個“窗口”

  • 多文件分割
    • vim -o|-O file1 file2…
    • -o:水平分割
    • -O:垂直分割
    • 在窗口間切換:Ctrl + w,Arrow
  • 單文件窗口分割
    • Ctrl+w,s:split,水平分割
    • Ctrl+w,v:vertical,垂直分割
    • Ctrl+w,q:取消相鄰窗口
    • Ctrl+w,o:取消全部窗口
    • :wqall 退出

定製vim特性

  • 配置文件:永久有效
    • 全局:/etc/vimrc
    • 個人:~/.vimrc(新建這個文件)
  • 擴展命令模式:當前vim進程有效
  • (1)行號
    • 顯示:set number,簡寫 set nu
    • 取消顯示:set nonumber,簡寫 setnonu
  • (2)忽略字符的大小寫
    • 啓用:set ignorecase,簡寫set ic
    • 不忽略:set noic
  • (3)自動縮進
    • 啓用:set autoindent,簡寫set ai
    • 禁用:set noai
  • (4)複製保留格式
    • 啓用:set paste
    • 禁用:set nopaste
  • (5)顯示Tab和換行符^I和顯示$顯示
    • 啓用:set list
    • 禁用:set nolist
  • (6)高亮搜索
    • 啓用:set hlsearch
    • 禁用:set nohlsearch
  • (7)語法高亮
    • 啓用:syntax on
    • 禁用:syntax off
  • (8)文件格式
    • 啓用windows格式:set fileformat=dos
    • 啓用unix格式:set fileformat=unix
    • 簡寫 set ff=dos|unix
  • (9)設置文本寬度
    • set textwidth=65(vim only)
    • setwrapmargin=15
  • (10)設置光標所在行的標識線
    • 啓用:set cursorline ,簡寫set cul
    • 禁用:set nocursorline
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章