Vim常用命令及配置方案

来源:https://www.cnblogs.com/silence1772/archive/2018/07/16/9317201.html
-Advertisement-
Play Games

幾句話 很久之前就接觸到vim,初學那陣覺得vim很酷炫,但確實對新手不是很友好。我也就簡單看了下基本操作就上手了,但又不是長期在vim下工作,這就導致了每一次重新使用vim都要再去回溫下基本操作,很是難受,所以就趁這個機會把基本操作都記錄下來,一來可以當做自己的筆記,二來希望可以幫到同樣和我一樣用 ...


幾句話

很久之前就接觸到vim,初學那陣覺得vim很酷炫,但確實對新手不是很友好。我也就簡單看了下基本操作就上手了,但又不是長期在vim下工作,這就導致了每一次重新使用vim都要再去回溫下基本操作,很是難受,所以就趁這個機會把基本操作都記錄下來,一來可以當做自己的筆記,二來希望可以幫到同樣和我一樣用過vim但卻忘得差不多的人。另外,這裡也記錄一下自己的vim配置,這個配置可能並沒有其他網友分享的那麼強大,但至少足夠簡單,能夠提高自己編碼的效率。

vim常用命令

首先先簡單梳理一下vim的工作模式。vim有三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)

簡單來講就是,當我們剛打開vim,或者使用vim打開了一個文件,終端上顯示著文件的內容,這時候就是命令模式(如上圖就是剛打開一個文件的情況,此時游標位於第一行行首處),在現在的情況下,鍵盤輸入小寫的i a o 或者大寫I A O中的其中一個,就可以進入輸入模式,各個按鍵的具體意義如下:

按鍵 具體意義
i 從目前游標所在處輸入
I 在目前所在行的第一個非空格符處開始輸入
a 從目前游標所在的下一個字元處開始輸入
A 從游標所在行的最後一個字元處開始輸入
o 在目前游標所在的下一行處輸入新的一行
O 在目前游標所在的上一行處輸入新的一行
r 繼續輸入一個字元以取代游標所在處後面單個字元,而後返回命令模式
R 新輸入的字元會一直取代游標所在處後面的字元

當我們使用上述按鍵進入輸入模式,配合方向鍵編輯好文件內容後,使用ESC鍵可退出輸入模式,回到命令模式,vim的大部分命令都是在命令模式下使用。
命令模式下的按鍵十分豐富,主要的操作為游標移動、複製粘貼、搜索替換
游標移動的基本按鍵如下:

按鍵 具體意義
h 或 向左箭頭鍵(←) 游標向左移動一個字元
j 或 向下箭頭鍵(↓) 游標向下移動一行
k 或 向上箭頭鍵(↑) 游標向上移動一行
l 或 向右箭頭鍵(→) 游標向右移動一個字元

在上面的基礎上,如果你想游標的位置一次移動多行或者在同一行上移動多個字元,可以有以下幾種方法:

  • 直接輸入數字併在其後輸入相應的方向,例如輸入20j20↓表示游標向下移動20行,輸入20l20→表示游標向右移動20個字元。
  • 輸入數字後加空格可以使游標向右移動n個字元,例如20[space]即和上面第一條的20l20→達到相同的效果,為了簡單一點,我個人認為如果不是vim深度用戶的話,我們可以直接放棄記憶這個命令。同樣性質的命令還有20[enter],表示游標向下移動20行
  • ctrl+f/b/d/u可以用來上下翻頁,但是對大部分人來說沒有必要去記這個繁瑣的命令,我個人更加推薦使用鍵盤上的Page UpPage Down來上下翻頁
  • 0$可以用來移動游標到行首或行尾,同樣,我還是認為沒必要去記憶這個命令,而是直接使用HomeEnd來達到同樣的效果

另外,還有一些很方便的操作值得單獨拎出來進一下:

按鍵(區分大小寫) 具體意義
H(High) 游標移動到這個屏幕的最上方那一行的第一個字元
M(Middle) 游標移動到這個屏幕的中央那一行的第一個字元
L(Low) 游標移動到這個屏幕的最下方那一行的第一個字元
G 移動到這個文件的最後一行(常用)
gg 移動到這個文件的第一行(常用)
nG 移動到這個文件的第n行

複製粘貼的操作比較繁雜,但也並不是沒有規律可循,具體如下:

按鍵 具體意義
x或[delete] 刪除游標後面的單個字元,
X或[backspace] 刪除游標前面的單個字元
nx 連續向後刪除 n 個字元。同理,可以有大寫的nX
dd 刪除游標所在的一整行
ndd 刪除游標向下的n行(包括游標那一行)
d+某個位置 刪除游標處到那個位置的所有內容。例如d1G刪除從游標到第一行的所有內容,dG刪除從游標到最後一行的所有內容,d$d[End]刪除從游標處到行尾的所有字元。以此類推
yy 複製游標所在的那一行(常用)
nyy 複製游標向下的n行(包括游標那一行)
y+某個位置 複製選取的範圍,選取範圍如前面d+某個位置所示
p 將已複製的內容在下一行粘貼
P 將已複製的內容在上一行粘貼
J 將游標所在行與下一行的數據結合成同一行,即在刪除該行和下一行之間的換行符。
u 複原前一個動作(常用)
[ctrl]+r 重做上一個動作(常用)
.(小數點) 重覆前一個動作(常用)

搜索替換部分為了簡潔一點,就只提一下搜索,替換部分就不涉及了

按鍵 具體意義
/[要搜索的字元] 向游標之下尋找一個匹配的字元串。如/int會搜索匹配int
?[要搜索的字元] 向游標之上尋找一個匹配的字元串。

在上面搜索字元串的基礎上按回車鍵,就可使游標跑到搜索到的字元串處,這時輸入n游標就會跳到下一個或上一個匹配的字元串處,具體是上還是下取決於剛纔執行的是/string還是?string,而輸入大寫的N則是與小寫n相反的方向。(註意,當執行n到達文件底部時就會迴圈跳到頂部,反之亦然)

好了,現在我們已經能夠編輯文件內容了,那怎樣保存文件呢?一般情況下,當需要保存或退出文件時,我們習慣性按一下ESC鍵以進入命令模式(當然如果已經在命令模式下也習慣性按一下吧),這時輸入加相應的指令就能對文件執行相應的操作,這裡需要註意一點的就是,如果你對該文件沒有相應的許可權,那麼執行相關操作將會被拒絕,例如我在ubuntu下想要修改我沒有許可權的文件,vim會提示許可權拒絕,我需要執行sudo vim filename以root許可權進入vim才能修改文件。

按鍵 具體意義
:w 保存編輯的內容
:w! 若文件屬性為只讀,強制保存編輯的內容,需要相應的許可權
:q 退出vim
:q! 強制離開不保存編輯過的內容
:wq 保存後退出vim
:wq! 強制保存後退出vim
ZZ 若文件沒有改動,則不儲存離開,若文件已經被改動過,則儲存後離開!
:w filename 另存為filename
:! command 暫時離開vim到命令行模式下執行 command 的顯示結果!例如『:! ls /home』即可在 vi 當中察看 /home 底下以 ls 輸出的檔案信息!

與系統剪切板交互

這裡還要重點提一下vim與系統之間如何進行粘貼複製,我們知道,上面的粘貼複製命令只能在vim裡面使用,無法將vim裡面的內容複製出來或者將外面的內容粘貼進去,這將大大降低了我們CV鍵的威力,所以怎麼辦呢?

  1. 首先查看vim版本是否支持clipboard
    vim --version | grep "clipboard"
    如果顯示clipboard前面有一個小小的減號,說明不支持。
  2. 不支持的話需要安裝圖形化界面的vim,使用如下命令
    sudo apt-get install vim-gnome
  3. 安裝好了之後使用“+y進行複製,使用”+p進行粘貼,配合使用vV選中內容
  • 當然,如果你覺得上面的命令太複雜了,你可以在下麵所述的配置文件裡加上set clipboard=unnamedplus 這樣就可以直接使用 y p命令粘貼複製了。

配置方案

這個只是一個簡單的vim配置,留下了一些我認為必要的功能,沒有那麼多花俏的功能,也不像網上一些文章分享的配置成酷炫的IDE,我個人一貫的原則就是簡潔明瞭,使用方便即可。
使用方法:保存成名為.vimrc的文件放在目錄下,即用戶個人目錄下即可。

"********************************************************
"                   一般性配置                          *
"********************************************************

"關閉vim一致性原則,避免以前版本的一些bug和局限
set nocompatible

"顯示行號
set number

"設置在編輯過程中右下角顯示游標的行列信息
set ruler
 
"在狀態欄顯示正在輸入的命令
set showcmd
 
"設置歷史記錄條數
set history=1000
 
"設置取消備份 禁止臨時文件的生成
set nobackup
set noswapfile
 
"設置匹配模式,類似當輸入一個左括弧時會匹配相應的那個右括弧
set showmatch
 
"設置C/C++方式自動對齊
set autoindent
set cindent
 
"開啟語法高亮功能
syntax enable
syntax on
 
"指定配色方案為256色
set t_Co=256
 
"設置搜索時忽略大小寫
set ignorecase

"實時顯示搜索結果
set incsearch
 
"配置backspace的工作方式
set backspace=indent,eol,start
 
"設置在vim中可以使用滑鼠
set mouse=a
 
"設置tab寬度
set tabstop=4
 
"設置自動對齊空格數
set shiftwidth=4
 
"設置退格鍵時可以刪除4個空格
set smarttab
set softtabstop=4
 
"將tab鍵自動轉換為空格
set expandtab
 
"設置編碼方式
set encoding=utf-8
 
"自動判斷編碼時 依次嘗試以下編碼
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
 
"檢測文件類型
filetype on
 
"針對不同的文件採取不同的縮進方式
filetype indent on
 
"啟動智能補全
filetype plugin indent on

"括弧自動補全
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap < <><ESC>i

"直接使用y p進行系統級複製粘貼
set clipboard=unnamedplus

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 環境交代 ========== Linux系統:CentOS7, Xshell版本:6 操作步驟 下麵我們以一個文件上傳來演示用法 第一步 建立連接,這裡不多說 在Xshell中點擊如下圖標,或者直接按 Alt+Ctrl+F來新建文件傳輸 出現彈窗直接關閉即可 然後會出現以下界面 輸入help 查看 ...
  • 1.終端執行安裝命令 2.如下圖,多出Input method 3.點擊進行配置 4.reboot重啟系統,新建一個文本,試一下輸入,問題出來(難道是當時新建虛擬機時沒有選擇增強型虛擬鍵盤) ...
  • 1. 寫好觸摸屏驅動後,安裝tslib 1.1 tar xzf tslib-1.4.tar.gz 1.2 cd tslib 1.3 修改編譯器版本號或者內核版本號,使它們一致。不然會出錯,顯示selected device is not a touchscreen I understand 在內核中 ...
  • 192.168.4.119 為本機的ip地址;每條鏈的規則是由上至下進行匹配,因此我們需要把範圍小的規則放在上面以防被覆蓋。 1)清空iptables預設規則,並自定義規則 2)多埠匹配,開放21,22,23,80,3306埠 3)連續地址的匹配,允許192.168.4.1 ~ 192.168. ...
  • "Memory barrier" Memory barrier 簡介 程式在運行時記憶體實際的訪問順序和程式代碼編寫的訪問順序不一定一致,這就是記憶體亂序訪問。記憶體亂序訪問行為出現的理由是為了提升程式運行時的性能。記憶體亂序訪問主要發生在兩個階段: 1. 編譯時,編譯器優化導致記憶體亂序訪問(指令重排) 2 ...
  • 現象: 由於辦公室搬遷,機房中的測試伺服器有段時間不用,關機了。起來後,flannel 的IP段變了,遂想通過修改docker0的IP地址來使集群正常工作起來。 但是,無論修改/etc/default/docker中的,DOCKER_OPTS="--bip=X.X.X.X24 "後重啟docker, ...
  • "linuxer" 案例 比如內核的如下commit引入了一個嚴重的安全漏洞(編號CVE 2017 5123): 危害 一個攻擊案例可以參考: "freebuf" 《Linux內核Waitid系統調用本地提權漏洞(CVE 2017 5123)的分析與利用》 修複 而內核的這個commit對其進行了修 ...
  • 使用U盤製作一個PE系統,這裡推薦老毛桃或者大白菜;開機進入Bios,選擇U盤啟動;進入U盤啟動畫面後,選擇一個PE系統;進入PE系統後,我們去本機系統盤,將 C:/Windows/System32/osk.exe 做個備份;將同路徑下的cmd.exe重命名為osk.exe;重啟,進入Windows ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...