Linux之高效文本編輯利器 —— vim

目錄

一、vim的基本概念

二、Vim 的三種基本模式

1. 命令模式(Command Mode)

2. 插入模式(Insert Mode)

3. 底行模式(Last Line Mode)

模式切換方法

?IDE例子:

三、vim的基本操作

進入vim

模式切換

保存與退出

四、使用vim的大坑注意事項

原因分析

鍵位編碼差異

vim 的默認設計

終端/系統的中間處理

解決方案

方法 1:臨時切換(推薦)

方法 2:修改 vim 配置(比較麻煩)

方法 3:切換輸入習慣

底層原理

確保指令輸入的一致性

五、vim命令模式命令集匯總

【移動光標】

【插入模式】

【模式切換】

【刪除】

【復制粘貼】

【剪切】

【撤銷】

【大小寫切換】

【替換】

【更改】

【翻頁】

【跳至指定行】

六、vim末行模式命令集匯總

行號設置

跳轉與查找

文件操作

分屏操作

系統命令

問題提示

七、簡單 Vim 配置 [了解]

配置文件位置

系統級配置

用戶級配置

常用配置選項

插件安裝指南

第一步:準備工作

?第二步:安裝TagList插件

第三步:安裝WinManager插件

第四步:驗證安裝

重量級選手 —— 一鍵切換到大佬的配置


一、vim的基本概念

? ? ? ? vim(vi IMproved)是一款功能強大的多模式文本編輯器,專為高效代碼編輯而設計。作為開發者的得力助手,vim通過其獨特的模式設計大幅提升了文本編輯效率。

????????簡單來說,vi和vim都是多模式編輯器,但vim是vi的升級版。它不僅完全兼容vi的所有命令,還新增了許多實用功能,比如語法高亮和可視化操作。此外,vim支持在多種環境中運行,包括終端、X Window、Mac OS和Windows系統。為便于學習,我們統一以vim為例進行講解。


二、Vim 的三種基本模式

我們重點講解 Vim 的三種基礎模式(Vim 實際有多種模式,目前掌握這三種即可):

1. 命令模式(Command Mode)

  • 又稱普通模式(Normal Mode)
  • 功能:
    • 控制光標移動
    • 執行刪除字符、單詞或整行操作
    • 進行文本復制和移動
    • 可切換到插入模式或底行模式

2. 插入模式(Insert Mode)

  • 功能:
    • 唯一支持文本輸入的模式
    • 按 ESC 鍵返回命令模式
    • 后續最常用的編輯模式

3. 底行模式(Last Line Mode)

  • 功能:
    • 文件保存與退出
    • 文本替換操作
    • 字符串搜索
    • 顯示行號等

模式切換方法

  • 命令模式下按 Shift+:進入底行模式
  • 查看所有模式:在 Vim 中輸入 :help vim-modes 命令(共 12 種模式,包括 6 種基礎模式和 6 種附加模式)

古老的計算機連接的鍵盤上使用的就是vim文本編輯器,如圖中保留著的這四個功能鍵:

?IDE例子:


三、vim的基本操作

(這里演示了,后面就不演示了,太繁瑣了,操作太多了,明白就可以了)

進入vim

在系統提示符號輸入vim及文件名稱后,就進入vim全屏幕編輯畫面:

$ vim test.c

模式切換

  • 進入vim后默認處于[命令模式],此時需要切換到[插入模式]才能輸入文字

  • [命令模式]切換至[插入模式]

    • 輸入「a」:在當前光標的后一位置進入插入模式。

    • 輸入「i」:在當前光標處進入插入模式。

    • 輸入「o」:在當前光標處新起一行進入插入模式。

  • [插入模式]切換至[命令模式]:按ESC

    • 在[插入模式]下,只能持續輸入文字。

    • 如需修改錯誤,有兩種方式(均可實現文字修正):

    • 按「ESC」鍵切換至[命令模式],再移動光標進行刪除
    • 直接刪除錯誤內容
  • [命令模式]切換至[末行模式]

    • Shift + ;(即輸入:

保存與退出

在[正常模式]下,按:進入末行模式后:

  • w?保存當前文件

  • wq保存該文件并退出vim

  • q!不保存該文件并強制退出vim


四、使用vim的大坑注意事項

? ? ? ? 我在使用vim遇到的情況是 vim 中一個非常經典的數字鍵盤輸入問題,根本原因在于:(前提你的外設鍵盤是全鍵鍵盤)數字小鍵盤(Numpad)(右邊)的輸入信號和主鍵盤區的數字鍵(左邊)在系統中被識別為不同的鍵位以下是詳細解釋和解決方案:

原因分析

  1. 鍵位編碼差異

    • 主鍵盤區數字鍵(如字母區上方的?1?2?3)在系統中被識別為普通數字鍵

    • 小鍵盤數字鍵(Numpad)在系統中被識別為?特殊功能鍵(如?KP_1?KP_2?KP_3

  2. vim 的默認設計

    • vim 的普通模式命令(如?3l僅響應主鍵盤區的數字輸入

    • 小鍵盤的數字輸入會被 vim 識別為無效命令或插入操作(部分系統會直接輸入數字字符)

  3. 終端/系統的中間處理

????????某些終端模擬器(如 iTerm2、GNOME Terminal)或系統驅動會將小鍵盤數字轉為特殊信號,導致 Vim 無法正確解析?

解決方案

方法 1:臨時切換(推薦)

  • 關閉 NumLock
    按下鍵盤的?NumLock?鍵(指示燈熄滅),此時小鍵盤會變成方向鍵/功能鍵,避免誤觸發插入模式

方法 2:修改 vim 配置(比較麻煩)

????????在系統級配置下(當然也可以是用戶級配置,后面第七點有講),vimrc在根目錄下的etc目錄中,在?vimrc?中添加以下配置,強制兼容小鍵盤輸入:

" 允許小鍵盤數字作為命令前綴
set notimeout
set ttimeout
set timeoutlen=100
map <Esc>OQ 1
map <Esc>OR 2
map <Esc>OS 3
map <Esc>Ot 4
map <Esc>Ou 5
map <Esc>Ov 6
map <Esc>Ow 7
map <Esc>Ox 8
map <Esc>Oy 9
map <Esc>Op 0

方法 3:切換輸入習慣

  • 使用主鍵盤區數字鍵輸入命令

  • 需要輸入大量數字時再開啟小鍵盤

底層原理

????????小鍵盤的數字鍵在終端中實際發送的是?轉義序列(如?ESC O q?代表?KP_1),而 Vim 默認不將這些序列識別為數字命令。這與終端類型(TERM?環境變量)、鍵盤驅動、GUI 環境都有關聯。

????????如果問題持續,建議在終端設置中檢查「將小鍵盤數字作為普通鍵發送」選項(常見于 XShell/iTerm2 的高級設置)。

確保指令輸入的一致性

????????在輸入命令時,必須嚴格遵守規范的輸入方式。例如:若要執行「G」命令(跳轉到文章末尾),就必須準確輸入大寫字母G,而不能使用小寫字母g。


五、vim命令模式命令集匯總

【移動光標】

  • 按「k」:光標上移。
  • 按「j」:光標下移。
  • 按「h」:光標左移。
  • 按「l」:光標右移。
  • 按「$」:移動到光標所在行的行尾。
  • 按「^」:移動到光標所在行的行首。
  • 按「gg」:移動到文本開始。
  • 按「Shift+g」:移動到文本末尾。
  • 按「n+Shift+g」:移動到第n行行首。
  • 按「n+Enter」:當前光標向下移動n行。
  • 按「w」:光標從左到右,從上到下的跳到下一個字的開頭。
  • 按「e」:光標從左到右,從上到下的跳到下一個字的結尾。
  • 按「b」:光標從右到左,從下到上的跳到上一個字的開頭
  • 按「G」:移動到文章的最后
  • 按「#l」:光標移到該行的第#個位置,如:5l,56l
  • 按「ctrl」+「b」:屏幕往"后"移動一頁
  • 按「ctrl」+「f」:屏幕往"前"移動一頁
  • 按「ctrl」+「u」:屏幕往"后"移動半頁
  • 按「ctrl」+「d」:屏幕往"前"移動半頁

【插入模式】

  • 按「i」:在當前光標處進入插入模式(從光標當前位置開始輸入文件)
  • 按「a」:在當前光標的后一位置進入插入模式(從光標下一位置開始輸入文字)
  • 按「o」:在當前光標處新起一行進入插入模式(插入新行并從行首輸入文字)

【模式切換】

  • 「ESC」鍵:從插入模式切換為命令模式
  • 輸入「Shift+;」即可進入底行模式,實際上就是輸入「:」

【刪除】

  • 按「x」:刪除光標所在位置的字符(每按一次刪除一個字符)
  • 按「nx」:刪除光標所在位置開始往后的n個字符(如「6x」刪除后面6個字符)
  • 按「X」:刪除光標所在位置的前一個字符(大寫的X)
  • 按「nX」:刪除光標所在位置的前n個字符(如「20X」刪除前面20個字符)
  • 按「dd」:刪除光標所在行
  • 按「ndd」:刪除光標所在行開始往下的n行(從光標行開始刪除#行)

【復制粘貼】

  • 按「yy」:復制光標所在行到緩沖區
  • 按「nyy」:復制光標所在行開始往下的n行到緩沖區(如「6yy」拷貝6行文字)
  • 按「yw」:將光標所在位置開始到字尾的字符復制到緩沖區
  • 按「nyw」:將光標所在位置開始往后的n個字復制到緩沖區(復制#個字)
  • 按「p」:將已復制的內容在光標的下一行粘貼上(需與"y"命令配合)
  • 按「np」:將已復制的內容在光標的下一行粘貼n次

【剪切】

  • 按「dd」:剪切光標所在行
  • 按「ndd」:剪切光標所在行開始往下的n行
  • 按「p」:將已剪切的內容在光標的下一行粘貼上
  • 按「np」:將已剪切的內容在光標的下一行粘貼n次

【撤銷】

  • 按「u」:撤銷(可多次按撤銷多步操作)
  • 按「Ctrl+r」:恢復剛剛的撤銷(撤銷的恢復)

【大小寫切換】

  • 按「~」:完成光標所在位置字符的大小寫切換
  • 按「n~」:完成光標所在位置開始往后的n個字符的大小寫切換

【替換】

  • 按「r」:替換光標所在處的字符
  • 按「R」:替換光標所到位置的字符,直到按下「Esc」鍵為止

【更改】

  • 按「cw」:將光標所在位置開始到字尾的字符刪除,并進入插入模式(更改到字尾處)
  • 按「cnw」:將光標所在位置開始往后的n個字刪除,并進入插入模式(如「c3w」更改3個字)

【翻頁】

  • 按「Ctrl+b」:上翻一頁(屏幕往"后"移動一頁)
  • 按「Ctrl+f」:下翻一頁(屏幕往"前"移動一頁)
  • 按「Ctrl+u」:上翻半頁(屏幕往"后"移動半頁)
  • 按「Ctrl+d」:下翻半頁(屏幕往"前"移動半頁)

【跳至指定行】

  • 按「Ctrl+g」:列出光標所在行的行號
  • 按「nG」:移動到第n行行首(如「15G」跳轉到第15行)

六、vim末行模式命令集匯總

????????在使用底行模式之前,請先按「ESC」鍵確保處于普通模式,再按「:」進入底行模式,輸入完指令后按Enter回車鍵執行該指令。

行號設置

  • 「set nu」:顯示行號

  • 「set nonu」:取消行號

跳轉與查找

  • 「#」:跳轉到指定行(如「:15」跳轉到第15行)

  • 「/關鍵字」:向下查找關鍵字(按「n」查找下一個)

  • 「?關鍵字」:向上查找關鍵字(按「n」查找上一個)

文件操作

  • 「w」:保存文件

  • 「q」:退出vim(加「!」強制退出)

  • 「wq」:保存并退出

分屏操作

  • 「vs 文件名」:垂直分屏打開新文件

  • 「Ctrl+w+w」:在分屏間切換光標

系統命令

  • 「!指令」:執行外部Shell命令(如「!ls」查看目錄)

問題提示

  • / 和 ? 查找的區別:/是向下查找,?是向上查找


七、簡單 Vim 配置 [了解]

配置文件位置

  • 系統級配置

    • 路徑:/etc/vimrc

    • 說明:這是公共的 vim 配置文件,對所有用戶有效

  • 用戶級配置

    • 路徑:~/.vimrc(如果不存在,則需要手動創建它

      # 1. 確保在主目錄
      cd ~# 2. 創建.vimrc文件
      touch .vimrc# 3. 編輯配置文件(按i進入編輯模式,添加配置后ESC+:wq保存退出)
      vim .vimrc

    • 說明:

      1. 從管理員切換到用戶:su [用戶名]

      2. 進入主目錄:cd ~

      3. 編輯配置文件:vim .vimrc

常用配置選項

  • 啟用語法高亮::syntax on
  • 顯示行號::set nu
  • 設置縮進為4個空格::set shiftwidth=4

插件安裝指南

????????要打造美觀實用的 Vim 環境,默認配置可能功能有限。你可以通過安裝插件來增強體驗。首先請確認你正在為正確的用戶進行配置,然后按照以下步驟操作:

第一步:準備工作

  1. 確保已創建用戶級vim配置

    cd ~
    touch .vimrc
    mkdir -p ~/.vim/{doc,plugin}  # 創建插件所需目錄

?第二步:安裝TagList插件

  1. 下載插件

    #直接下載(需有wget)
    wget http://www.vim.org/scripts/download_script.php?src_id=19574 -O taglist.zip

  2. 解壓安裝

    unzip taglist.zip -d taglist
    cd taglist# 復制文件到vim配置目錄
    cp doc/taglist.txt ~/.vim/doc/
    cp plugin/taglist.vim ~/.vim/plugin/

????????3.配置(編輯~/.vimrc)

vim ~/.vimrc

i進入插入模式,添加:

" TagList配置
let Tlist_Show_One_File=1     " 只顯示當前文件的標簽
let Tlist_Exit_OnlyWindow=1   " 如果只有taglist窗口則退出vim
let Tlist_Use_Right_Window=1  " 在右側顯示窗口

ESC后輸入:wq保存退出

第三步:安裝WinManager插件

  1. 下載插件

    wget http://www.vim.org/scripts/download_script.php?src_id=754 -O winmanager.zip

  2. 解壓安裝

    unzip winmanager.zip -d winmanager
    cd winmanagercp doc/winmanager.txt ~/.vim/doc/
    cp plugin/winmanager.vim ~/.vim/plugin/
    cp plugin/wintagexplorer.vim ~/.vim/plugin/

  3. 配置(編輯~/.vimrc)

    vim ~/.vimrc

    添加:

    " WinManager配置
    let g:winManagerWindowLayout='FileExplorer|TagList'  " 窗口布局
    nmap wm :WMToggle<cr>  " 設置wm快捷鍵切換窗口管理器

????????保存退出(:wq

第四步:驗證安裝

  1. 重啟Vim

  2. 測試功能

  • 打開一個C文件::e test.c

  • 普通模式下輸入wm,應該可以看到:

    • 左側的文件瀏覽器

    • 右側的函數標簽列表

  • 再次輸入wm可關閉

更具體請移步到:手把手教你把Vim改裝成一個IDE編程環境(圖文)_vim 打造成 ide-CSDN博客,其他手冊,請執行?vimtutor 命令。

重量級選手 —— 一鍵切換到大佬的配置

? ? ? ? 上述的配置 vim 方法可能會比較復雜,特別是需要安裝插件時,不建議手動逐個配置。更簡單的方式是直接運行以下命令(注意:要在需要配置 vim 的用戶下執行此命令,不建議直接在 root 用戶下操作):

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

執行后會提示輸入 root 密碼,按指引操作即可:

稍微有點慢,我們等一下安裝:

安裝配置完成后,手動執行source ~/.bashrc命令即可生效:

????????這時我們打開上次的test.c,可以看到此時vim文本編輯器具備了語法高亮、自動補全、行號顯示和自動縮進等功能:

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

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

相關文章

【STM32】HAL庫 之 CAN 開發指南

基于stm32 f407vet6芯片 使用hal庫開發 can 簡單講解一下can的基礎使用 CubeMX配置 這里打開CAN1 并且設置好波特率和NVIC相關的配置 波特率使用波特率計算器軟件 使用采樣率最高的這段 填入 得到波特率1M bit/s 然后編寫代碼 環形緩沖區 #include "driver_buffer.h&qu…

《Scientific Reports撤稿門技術節分析》——從圖像篡改檢測到學術倫理重建的技術透視

2023年以來&#xff0c;《Scientific Reports》等開放獲取期刊頻繁曝出大規模撤稿事件&#xff0c;涉及數據造假、圖像重復、AI生成內容篡改等技術性學術不端行為。本文以技術視角切入&#xff0c;系統分析撤稿事件背后的技術動因、檢測手段漏洞、學術出版體系的技術短板及應對…

Client請求Grpc服務報錯

現象&#xff1a;err: rpc error: code Unimplemented desc 背景&#xff1a;調用鏈路A->B->C&#xff0c;A是一個Http協議的接口&#xff0c;B也是一個Http協議的接口&#xff0c; 但C是一個Grpc協議的接口。 解決思路&#xff1a;查看C服務對應的proto&#xff0c;比…

機器學習課程設計報告 —— 基于口紅數據集的情感分析

目錄 一、課程設計目的 二、數據預處理及分析 2.1 數據預處理 2.2 數據分析 三、特征選擇 3.1 特征選擇的重要性 3.2 如何進行特征選擇 3.3 特征選擇的依據 3.4 數據集的劃分 四、模型訓練與模型評估 4.1 所有算法模型不調參 4.2 K-近鄰分類模型 4.3 GaussianNB模…

Flutter 實現6個驗收碼輸入框

開箱即用&#xff0c;初始化時就喚起鍵盤&#xff0c;并選中第一個 import package:flutter/material.dart;import dart:async; // 引入 Timer 類class VerificationCode extends StatefulWidget {final String phoneNumber;const VerificationCode({super.key, required this.…

如何查看服務器有幾張GPU

要查看服務器上有多少張 GPU&#xff0c;你可以使用以下幾種方法&#xff1a; 1.1 使用 nvidia-smi工具&#xff08;針對 NVIDIA GPU&#xff09;&#xff1a; 如果你的服務器上安裝了 NVIDIA GPU 驅動程序&#xff0c;那么可以使用 nvidia-smi 命令查看詳細的 GPU 信息。 n…

3099. 哈沙德數

?題目來源&#xff1a; LeetCode題目&#xff1a;3099. 哈沙德數 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 按要求求和判斷即可。 解題代碼&#xff1a; #python3 class Solution:def sumOfTheDigitsOfHarshadNumber(self, x: int) -> int:sumDigi…

數字化回歸本質:第一性原理驅動的制造業轉型與AI+云PLM系統實踐

2014年&#xff0c;埃隆馬斯克在南加州大學商學院的畢業演講上&#xff0c;留下了一場5分鐘的精彩分享&#xff0c;他將自己對工作和人生的思考總結為五個要點&#xff0c;其中一點說到了他的決策方式&#xff1a; “也許你聽我說過&#xff0c;要從物理學的角度思考問題&…

仿DeepSeek AI問答系統完整版(帶RAG本地知識庫+聯網搜索+深度思考) +springboot+vue3

今天教大家如何設計一個企業級的 deepseek問答 一樣的系統 , 基于目前主流的技術&#xff1a;前端vue3&#xff0c;后端springboot。同時還帶來的項目的部署教程。 系統的核心功能 1. 支持本地上傳文檔知識庫&#xff0c;RAG技術。 支持的文檔有txt&#xff0c;doc&#xff0c…

27、請求處理-【源碼分析】-怎么改變默認的_method

27、請求處理-【源碼分析】-怎么改變默認的_method 要改變 Spring Boot 中默認的 _method 參數&#xff0c;可以通過以下步驟實現&#xff1a; #### 原理分析 Spring Boot 中默認的 HiddenHttpMethodFilter 用于將表單中的 _method 參數值映射為實際的 HTTP 方法&#xff08;如…

歐拉角轉為旋轉矩陣

外旋是固定坐標系&#xff0c;內旋是動態坐標系。外旋和內旋具有等價性。 固定坐標系依次繞xyz軸旋轉&#xff0c;旋轉矩陣 動態坐標系依次繞zyx軸旋轉&#xff0c;旋轉矩陣 numpy和scipy計算對比 import numpy as np from numpy import sin, cos, pi # 抑制科學計數法&#…

【AI學習筆記】Coze平臺實現生成小紅書熱門多圖筆記

背景前搖&原視頻教程&#xff1a; 最近總是在小紅書上刷到多圖組成的養生小妙招、效率提升小tips、退休奶奶療愈語錄等等這樣的圖文筆記&#xff0c;而且人物圖像一眼就是AI畫的。 當時我以為這個排版和文字是人工的&#xff0c;就讓AI保持角色一致性畫了下圖&#xff0c;…

如何選擇自動化編程平臺

從事自動化行業的工作者都知道&#xff0c;做PLC編程需要PLC編程軟件&#xff0c;做HMI可視化需要HMI編程軟件&#xff0c;做SCADA需要SCADA編程軟件&#xff0c;做DCS需要DCS軟件&#xff0c;做仿真調試需要仿真軟件。這些軟件有國外的、國內的&#xff0c;有傳統自動化廠商開…

Bug 背后的隱藏劇情

Bug 背后的隱藏劇情 flyfish 1. 「bug」&#xff1a;70多年前那只被拍進史書的飛蛾 故事原型&#xff1a;1947年哈佛實驗室的「昆蟲命案」 1947年的計算機長啥樣&#xff1f;像一間教室那么大&#xff0c;塞滿了幾萬根繼電器&#xff08;類似老式開關&#xff09;&#xff…

如何將通話記錄從Android傳輸到Android

“如何將通話記錄從 Android 轉移到 Android&#xff1f;我換了一部新的 Android 手機&#xff0c;想要將通話記錄復制到其中。”您需要將通話記錄從 Android 傳輸到 Android 是一種常見的情況&#xff0c;因為通話記錄是手機上最重要的數據之一。幸運的是&#xff0c;如果您從…

Android 云手機橫屏模式下真機鍵盤遮擋輸入框問題處理

一、背景 打開橫屏應用,點擊云機EditText輸入框,輸入框被鍵盤遮擋,如下圖&#xff1a; 未打開鍵盤狀態: 點擊第二個輸入框,鍵盤遮擋了輸入框&#xff1a; 二、解決方案&#xff08;推薦第三中方案,博主采用的也是第三種方案&#xff09; 博主這里整理了三種方案&#xff1a;…

進程IO之 進程

一、進程相關概念 1.什么是進程 程序&#xff1a;靜態的&#xff0c;編譯好的可執行文件&#xff0c;存放在磁盤中的指令和數據的集合 進程&#xff1a;動態的&#xff0c;是程序的一次執行過程&#xff0c;是獨立的可調度的任務 2.進程的特點 &#xff08;1&#xff09;對…

Condition源碼解讀(二)

本章我們繼續將Condition的最后一個方法signal方法&#xff0c;如果前面沒有看過的可以點擊LockSupport與Condition解析來看看Condition解讀的前半部分。 signal方法&#xff1a; public final void signal() {if (!AbstractQueuedLongSynchronizer.this.isHeldExclusively())…

股票收益率的計算

首先&#xff0c;需要從 Tushare.pro 注冊一個賬號并調用其API獲取股票日線數據&#xff08;具體操作請查看官網&#xff09;。 以通過調用tushare獲取股票000001(平安銀行)的股票數據為例&#xff0c;這里不設置日期&#xff0c;那么默認獲取Tushare提供的所有歷史數據。也可…

《算法筆記》13.2小節——專題擴展->樹狀數組(BIT) 問題 D: 數列-訓練套題T10T3

數列(sequence.pas/c/cpp) - 問題描述 一個簡單的數列問題&#xff1a;給定一個長度為n的數列&#xff0c;求這樣的三個元素ai, aj, ak的個數&#xff0c;滿足ai < aj > ak&#xff0c;且i < j < k。 - 輸入數據 第一行是一個整數n(n < 50000)。 第二行n個整…