Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 核心編輯器 Vim/vi 完全掌握:三大模式、核心操作與高效編輯技巧

編輯:Linux 教學

認識 vi/Vim

vi 是 POSIX 標準編輯器,系統救援模式唯一可用編輯器;Vim (Vi IMproved) 是現代發行版默認替代品,擁有語法高亮、多級撤銷、插件系統等增強功能。掌握 vi 操作等於掌握了所有類 Unix 系統的基礎編輯能力。

三大核心模式狀態機


+----------------+     i,a,o      +----------------+
|  命令模式      |  ------------> |  輸入模式      |
|  (默認/ESC)    | <------------  |  (--INSERT--)  |
+----------------+     ESC        +----------------+
        | ^
        | : (冒號)
        v |
+----------------+
|  末行模式      |
|  (命令行模式)  |
+----------------+

模式切換速查

從/到命令模式輸入模式末行模式
命令模式—i a o I A O c s R: / ?
輸入模式Esc Ctrl+[——
末行模式Esc Enter (執行後)——

啟動與退出策略

vi                    # 新建無名緩衝區
vi file.txt           # 編輯現有/新建文件
vi +10 file.txt       # 打開定位第 10 行
vi +/pattern file.txt # 打開定位首次匹配行
vi -r file.txt        # 恢復崩潰時的 .swp 緩衝區

# 退出命令(末行模式)
:q        # 未修改時退出
:q!       # 強制放棄修改退出
:wq       # 保存並退出
:wq!      # 強制保存(需文件寫權限)
:x        # 等同 :wq(僅修改時寫入)
:wa       # 保存所有打開文件
:qa       # 關閉所有窗口

高效光標移動體系

字符/單詞級

h j k l          # 左下上右(鍵盤主鍵區,無需移動手)
w b e            # 下一單詞首/上一單詞首/當前單詞尾
W B E            # 以空格分隔的「大單詞」
0 ^ $            # 行首/第一個非空白字符/行尾
g_               # 行尾非空白字符

行/段落/文件級

{ }              # 上一段/下一段(空行分隔)
( )              # 上一句/下一句
gg G             # 文件首行/末行
:n               # 跳轉第 n 行
nG               # 跳轉第 n 行
Ctrl+f/b         # 向下/向上翻頁
Ctrl+d/u         # 向下/向上翻半頁
H M L            # 屏幕首行/中行/尾行
zt zz zb         # 當前行置頂/置中/置底

標記跳轉

ma               # 設置標記 a (a-z 局部, A-Z 全局)
'a                # 跳轉到標記 a 行首
`a               # 跳轉到標記 a 精確位置
'' ``            # 跳轉回上次位置

編輯操作核心語法:動詞 + 移動 = 動作

# 刪除 (d)
dw    # 刪除到單詞尾
d$ / D  # 刪除到行尾
dd    # 刪除整行
3dd   # 刪除 3 行
dap   # 刪除一段(段落)

# 修改 (c = 刪除 + 進入輸入模式)
cw    # 修改單詞
cc    # 修改整行
C     # 修改到行尾

# 替換/取代
rX    # 當前字符替換為 X
R     # 進入替換模式(覆蓋模式)
s     # 刪除字符並進入輸入模式 (cl)
S     # 刪除行並進入輸入模式 (cc)

# 複製/粘貼 (y/p)
yy / Y  # 複制整行
yw      # 複制單詞
y$      # 複制到行尾
p       # 光標後粘貼
P       # 光標前粘貼
"ayy    # 複制到寄存器 a
"ap     # 從寄存器 a 粘貼

# 撤銷/重做
u       # 撤銷
Ctrl+r  # 重做
U       # 撤銷該行所有修改

尋找與替換正則表達式

即時搜索

/pattern   # 向下搜索
?pattern   # 向上搜索
n          # 下一個匹配
N          # 上一個匹配
*          # 搜索光標下單詞向下
#          # 搜索光標下單詞向上
g* g#      # 部分匹配單詞

範圍替換命令

:s/old/new/           # 當前行首次替換
:s/old/new/g          # 當前行全局替換
:.,$s/old/new/g       # 當前行到文件尾
:%s/old/new/g         # 全文替換
:%s/old/new/gc        # 全文替換並逐個確認
:5,10s/old/new/g      # 第 5-10 行替換
:g/pattern/s/old/new/g # 匹配 pattern 的行執行替換

# 替換分隔符可自定義(避免正斜杠衝突)
:s#/usr/local#/opt#g
:s@https://@https://@g

多文件與分屏編輯

:e file.txt      # 編輯新文件
:bn :bp          # 下一個/上一個緩衝區
:ls              # 列出所有緩衝區
:split / :sp     # 水平分屏
:vsplit / :vs    # 垂直分屏
Ctrl+w w         # 循環切換窗口
Ctrl+w h/j/k/l   # 方向切換窗口
Ctrl+w =         # 等寬高分屏
:tabnew file     # 新標籤頁
gt / gT          # 下一個/上一個標籤頁

配置文件 ~/.vimrc 精簡模板

" 基礎設置
set nocompatible
set encoding=utf-8
set fileencodings=utf-8,gbk,gb2312,gb18030
set number                " 顯示行號
set relativenumber        " 相對行號(配合移動命令)
set cursorline            " 高亮當前行
set scrolloff=5           # 保持光標上下 5 行可見
set sidescrolloff=10
set wrap                  # 自動換行
set linebreak             # 整詞換行
set showbreak=↪\ 

" 搜索設置
set ignorecase            # 忽略大小寫
set smartcase             # 含大寫則區分大小寫
set incsearch             # 增量搜索
set hlsearch              # 高亮匹配

" 縮進設置
set tabstop=4
set shiftwidth=4
set expandtab             # Tab 轉空格
set smartindent
set autoindent

" 系統整合
set clipboard=unnamedplus # 使用系統剪貼板
set mouse=a               # 啟用鼠標
set undofile              # 持久化撤銷歷史
set undodir=~/.vim/undodir

" 實用映射
nnoremap w :w
nnoremap q :q
nnoremap h :nohlsearch  " 清除搜索高亮
inoremap jk          # 輸入模式快速退出

恢復崩潰會話

# 異常退出後會產生 .file.swp 交換文件
vi -r file.txt          # 列出可恢復會話
vi -r                   # 列出所有會話

# 打開時提示選項:
[O]pen Read-Only  - 只讀查看
[E]dit anyway     - 放棄恢復
[R]ecover         - 恢復未保存內容(推薦)
[D]elete it       - 刪除交換文件
[Q]uit            - 放棄打開

# 恢復後立即 :w 保存,然後手動刪除 .swp 文件
Copyright © Windows教程網 All Rights Reserved