Vim使用完全指南:從基礎到高效編輯

Vim使用完全指南:從基礎到高效編輯

一、Vim簡介與基本概念

Vim(Vi IMproved)是從vi發展出來的一個功能強大的文本編輯器,以其高效性和靈活性著稱,特別適合程序開發和系統管理任務。與常規文本編輯器不同,Vim采用模式編輯的設計理念,這使得它擁有獨特的工作方式。

Vim的三種主要模式

  1. 普通模式(Normal Mode)

    • 啟動Vim后的默認模式
    • 用于執行編輯器命令、移動光標和操作文本
    • 所有其他模式最終都會返回到普通模式
  2. 插入模式(Insert Mode)

    • 用于輸入和編輯文本內容
    • 類似于常規文本編輯器的編輯狀態
    • 通過多種命令可以進入插入模式
  3. 命令行模式(Command-line Mode)

    • 用于執行保存文件、退出編輯器等操作
    • 通過普通模式下按:進入
    • 也支持查找替換等高級功能

模式切換是Vim高效編輯的基礎,理解并熟練掌握模式切換是學習Vim的第一步。

二、Vim基礎操作與常用命令

1. 文件操作

打開文件
vim 文件名          # 打開指定文件
vim +n 文件名       # 打開文件并定位到第n行
vim +/pattern 文件名 # 打開文件并搜索pattern
保存與退出
:w              # 保存文件
:wq 或 :x       # 保存并退出
:q              # 退出(文件未修改時)
:q!             # 強制退出,不保存修改
:w 新文件名      # 另存為

2. 光標移動

基本移動
h        # 左
j        # 下
k        # 上
l        # 右
高效移動
w/W      # 下一個單詞開頭(W忽略標點)
b/B      # 上一個單詞開頭
e/E      # 下一個單詞結尾
0        # 行首
$        # 行尾
gg       # 文件開頭
G        # 文件末尾
:n       # 跳轉到第n行
屏幕滾動
Ctrl+f   # 向下翻頁
Ctrl+b   # 向上翻頁
Ctrl+d   # 向下半頁
Ctrl+u   # 向上半頁
zz       # 當前行居中

3. 文本編輯

插入文本
i        # 在光標前插入
a        # 在光標后插入
I        # 在行首插入
A        # 在行尾插入
o        # 在下方新建行插入
O        # 在上方新建行插入
刪除文本
x        # 刪除當前字符
dw       # 刪除到下一個單詞開頭
d$       # 刪除到行尾
dd       # 刪除整行
ndd      # 刪除n行
復制粘貼
yy       # 復制當前行
yw       # 復制當前單詞
p        # 在光標后粘貼
P        # 在光標前粘貼
撤銷與重做
u        # 撤銷
Ctrl+r   # 重做

三、Vim高效編輯技巧

1. 查找與替換

查找
/pattern  # 向前搜索pattern
?pattern  # 向后搜索pattern
n        # 下一個匹配項
N        # 上一個匹配項
替換
:s/old/new       # 替換當前行第一個old
:s/old/new/g     # 替換當前行所有old
:%s/old/new/g    # 替換全文所有old
:%s/old/new/gc   # 替換全文所有old,每次確認

2. 可視模式

v        # 進入字符可視模式
V        # 進入行可視模式
Ctrl+v   # 進入塊可視模式

在可視模式下,可以使用移動命令選擇文本,然后進行復制(y)、刪除(d)等操作。

3. 多文件編輯

緩沖區操作
:ls       # 列出所有緩沖區
:bn       # 下一個緩沖區
:bp       # 上一個緩沖區
:bd       # 刪除當前緩沖區
窗口分割
:sp [文件名]   # 水平分割窗口
:vsp [文件名]  # 垂直分割窗口
Ctrl+ww    # 切換窗口
:q         # 關閉當前窗口
標簽頁
:tabnew [文件名]  # 新建標簽頁
gt               # 下一個標簽頁
gT               # 上一個標簽頁
:tabclose        # 關閉當前標簽頁

四、Vim高級功能

1. 宏錄制

q[a-z]    # 開始錄制宏到指定寄存器
q         # 停止錄制
@[a-z]    # 執行指定寄存器中的宏
@@        # 重復上次執行的宏

2. 標記與跳轉

m[a-z]    # 設置標記
`[a-z]    # 跳轉到標記
'.        # 跳轉到最后修改的位置

3. 自動補全

Ctrl+n    # 向下選擇補全項
Ctrl+p    # 向上選擇補全項

五、Vim使用注意事項

  1. 模式意識:時刻注意當前所處的模式,錯誤的模式會導致意外的編輯結果。

  2. 保存習慣:頻繁使用:w保存文件,避免意外丟失編輯內容。

  3. 備份文件:Vim會生成.swp交換文件,非正常退出后可以使用vim -r 文件名恢復。

  4. 編碼問題:編輯含中文的文件時,確保編碼設置正確:

    :set fileencoding=utf-8
    
  5. 學習曲線:Vim的命令需要時間熟悉,建議每天練習幾個新命令。

  6. 配置文件:個性化設置可以保存在~/.vimrc中,如:

    set number      " 顯示行號
    syntax on       " 語法高亮
    set tabstop=4   " 制表符寬度
    
  7. 插件管理:謹慎選擇插件,過多的插件會影響啟動速度和穩定性。

六、Vim配置建議

基礎配置(~/.vimrc)

" 基本設置
set nocompatible   " 不使用vi兼容模式
set number         " 顯示行號
syntax on          " 語法高亮
set tabstop=4      " 制表符寬度
set shiftwidth=4   " 自動縮進寬度
set expandtab      " 將制表符轉換為空格
set autoindent     " 自動縮進" 搜索設置
set incsearch      " 增量搜索
set hlsearch       " 高亮搜索結果
set ignorecase     " 忽略大小寫
set smartcase      " 智能大小寫匹配" 界面設置
set cursorline     " 高亮當前行
set showmatch      " 顯示匹配括號
set laststatus=2   " 總是顯示狀態欄

實用快捷鍵映射

" 快速保存
nmap <leader>w :w<CR>" 快速退出
nmap <leader>q :q<CR>" 清除搜索高亮
nmap <silent> <leader>/ :nohlsearch<CR>" 窗口切換
nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l

七、學習資源與進階建議

  1. 內置教程:在終端輸入vimtutor可以啟動Vim自帶的交互式教程。

  2. 幫助系統:Vim內置詳盡的幫助文檔,使用:help命令查看。

  3. 循序漸進:不要試圖一次性掌握所有命令,從基礎開始逐步擴展。

  4. 實踐應用:在日常編輯任務中堅持使用Vim,實踐是最好的學習方法。

  5. 社區資源:參與Vim社區,學習他人的配置和技巧。

Vim的學習曲線雖然陡峭,但一旦掌握,它將極大地提升你的文本編輯效率。記住,成為Vim高手的關鍵在于持續練習和不斷探索。祝你在Vim的世界里編輯愉快!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79784.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

時序約束高級進階使用詳解三:Create_Clock

目錄 一、前言 二、設計示例 2.1 設計代碼 2.2 schematic 2.3 no overwriteing 2.4 約束到非時鐘引腳 三、Create_clock應用 3.1 時鐘輸入端口 3.2 7系列高速收發器輸出管腳 3.3 部分原語的輸出管腳 3.4 主時鐘路徑上創建主時鐘 3.5 虛擬時鐘 3.6 差分時鐘的約束 …

箱線圖(盒須圖)QCPStatiBox

一、QCPStatisticalBox 概述 QCPStatisticalBox 是 QCustomPlot 中用于繪制箱線圖(盒須圖)的類&#xff0c;可以顯示數據的五個關鍵統計量&#xff1a;最小值、第一四分位數(Q1)、中位數、第三四分位數(Q3)和最大值&#xff0c;以及可能的異常值。 二、主要屬性 屬性類型描述…

人形機器人馬拉松:北京何以孕育“領跑者”?

“機器人每跑一小步&#xff0c;都是人類科技的一大步”&#xff0c;這句對阿姆斯特朗登月名言的仿寫&#xff0c;恰如其分地詮釋了全球首場人形機器人半程馬拉松賽事的里程碑意義。 2025年4月19日&#xff0c;北京亦莊半程馬拉松暨人形機器人半程馬拉松圓滿結束。在總長21.09…

基于Python的推薦算法的電影推薦系統的設計

標題:基于Python的推薦算法的電影推薦系統的設計與實現 內容:1.摘要 本文圍繞基于Python的推薦算法的電影推薦系統展開研究。背景在于隨著電影數量的急劇增加&#xff0c;用戶在海量電影中找到符合自身喜好的影片變得困難。目的是設計并實現一個高效準確的電影推薦系統&#x…

【深度學習】詳解矩陣乘法、點積,內積,外積、哈達瑪積極其應用|tensor系列02

博主簡介&#xff1a;努力學習的22級計算機科學與技術本科生一枚&#x1f338;博主主頁&#xff1a; Yaoyao2024往期回顧&#xff1a;【深度學習】你真的理解張量了嗎&#xff1f;|標量、向量、矩陣、張量的秩|01每日一言&#x1f33c;: “腦袋想不明白的&#xff0c;就用腳想”…

面試常用基礎算法

目錄 快速排序歸并排序堆排序 n n n皇后問題最大和子數組爬樓梯中心擴展法求最長回文子序列分割回文串動態規劃求最長回文子序列最長回文子串單調棧雙指針算法修改 分割回文串滑動窗口棧 快速排序 #include <iostream> #include <algorithm>using namespace std;…

相對路徑和絕對路徑解析

在 Linux/Unix 和文件系統中&#xff0c;絕對路徑和相對路徑是描述文件或目錄位置的兩種方式&#xff0c;它們的核心區別在于路徑的起點和使用場景。以下是詳細對比&#xff1a; 目錄 1. 定義與起點 2. 符號與語法 3. 使用場景 4. 實際示例 示例 1&#xff1a;定位文件 示…

【算法數據結構】leetcode37 解數獨

37. 解數獨 - 力扣&#xff08;LeetCode&#xff09; 題目描述&#xff1a; 題目要求每一行 &#xff0c;每一列&#xff0c;每個3*3 的子框只能出現一次。每個格子的數字范圍1-9. 需要遍歷每個空格填入可能的數字&#xff0c;并驗證符合規則。如果符合就填入&#xff0c;不符…

Vector的學習

vector簡介 vector的相關文檔對于想深入了解的同學可以參考這個文檔進行學習。 vector是表示可變大小數組的序列容器。 就像數組一樣&#xff0c;vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素進行訪問&#xff0c;和數組一樣高效。但是又不…

Vue常用指令入門

1. v-for 作用&#xff1a;用于遍歷對象或數組 注意&#xff1a;需要提供key屬性&#xff0c;可以提高性能和避免渲染錯誤&#xff0c;值通常為index或item.id <li v-for"(item, index) in items" :key"index">{{ item }} </li>2. v-if,v-el…

在機器視覺檢測中為何選擇線陣工業相機?

線陣工業相機&#xff0c;顧名思義是成像傳感器呈“線”狀的。雖然也是二維圖像&#xff0c;但極寬&#xff0c;幾千個像素的寬度&#xff0c;而高度卻只有幾個像素的而已。一般在兩種情況下使用這種相機&#xff1a; 1. 被測視野為細長的帶狀&#xff0c;多用于滾筒上檢測的問…

線性DP:最長上升子序列(子序列可不連續,子數組必須連續)

目錄 Q1&#xff1a;簡單遍歷 Q2&#xff1a;變式&#xff08;加大數據量&#xff09; Q1&#xff1a;簡單遍歷 Dp問題 狀態表示 f(i,j) 集合所有以第i個數結尾的上升子序列集合-f(i,j)的值存的是什么序列長度最大值max- 狀態計算 &#xff08;其實質是集合的劃分&#xff09;…

【Web前端技術】第二節—HTML標簽(上)

hello&#xff01;好久不見—— 做出一個屬于自己的網站&#xff01; 云邊有個稻草人-個人主頁 Web前端技術—本篇文章所屬專欄 目錄 一、HTML 語法規范 1.1 基本語法概述 1.2 標簽關系 二、HTML 基本結構標簽 2.1 第一個 HTML 網頁 2.2 基本結構標簽總結 三、網頁開發…

論文降重GPT指令-實側有效從98%降低到8%

步驟1&#xff1a;文本接收 指令&#xff1a; 請用戶提供需要優化的文本內容。 對文本進行初步分析&#xff0c;識別文本的基本結構和風格。 操作&#xff1a; 接收并分析用戶提交的文本。 步驟2&#xff1a;文本優化 2.1 連接詞處理 指令&#xff1a; 刪除或替換連接詞&#x…

Jsp技術入門指南【九】詳細講解JSTL

Jsp技術入門指南【九】詳細講解JSTL 前言一、什么是JSTL&#xff1f;&#xff08;JavaServer Pages Standard Tag Library&#xff09;二、使用JSTL前的準備三、核心標簽庫常用標簽詳解1. <c:out>&#xff1a;輸出內容&#xff08;替代<% %>&#xff09;2. <c:i…

Linux操作系統--進程的創建和終止

目錄 1.進程創建 1.1fork()函數初識 1.2寫時拷貝 1. 提升系統效率 2. 隔離錯誤影響 3. 支持并行計算 2.進程終止&#xff1a; 2.1進程退出場景&#xff1a; 2.2進程常見退出方法&#xff1a; 2.3_exit()系統調用接口 2.4exit函數 2.5return退出 1.進程創建 1.1for…

OSPF綜合實驗——企業邊界路由器、LSA收斂

IP劃分粗略記號&#xff0c;方便后續配置 配置IP和環回--->ISP的IP配置和cheat認證---->配置OSPF和RIP---->企業邊界路由網段匯總---->特殊區域---> 缺省路由&#xff0c;重分發---->nat配置---->實現全網通 路由器配置IP和環回地址 <Huawei>sys…

Java【網絡原理】(4)HTTP協議

目錄 1.前言 2.正文 2.1自定義協議 2.2HTTP協議 2.2.1抓包工具 2.2.2請求響應格式 2.2.2.1URL 2.2.2.2urlencode 2.2.3認識方法 2.2.3.1GET與POST 2.2.3.2PUT與DELETE 2.2.4請求頭關鍵屬性 3.小結 1.前言 哈嘍大家好啊&#xff0c;今天來繼續給大家帶來Java中網絡…

Android學習總結之APK打包流程

一、預處理階段&#xff08;編譯前準備&#xff09; 1. AIDL 文件處理&#xff08;進程間通信基礎&#xff09; 流程&#xff1a; 用于實現 Android 系統中不同進程間的通信&#xff08;IPC&#xff09;。在項目構建時&#xff0c;AIDL 編譯器會將 .aidl 文件編譯為 Java 接口…

BDO分廠積極開展“五個一”安全活動

BDO分廠為規范化學習“五個一”活動主題&#xff0c;按照“上下聯動、分頭準備 、差異管理、資源共享”的原則&#xff0c;全面激活班組安全活動管理新模式&#xff0c;正在積極開展班組安全活動&#xff0c;以單元班組形式對每個班組每周組織一次“五個一”安全活動。 丁二醇單…