【Vim】基本操作

Vim 是文字編輯器,可視作 Unix 系統 vi 文字編輯器的升級版(99% 兼容 vi)。
Vim 比 vi 多擁有的特性諸如:

  • 支援不同系統
    • vi 只能在 Unix 系統上使用,而 Vim 可以運行於 Unix、MS-DOS…等系統
  • 支援多次 undo
    • vi ‘u’ undo 只能作用一次,Vim 支援多次 undo
  • 支援 GUI

IDE:Visual Studio 2022
IDE Plugin:Resharper/AceJump(2022)
AceJump(2012、2013、2015、2017、2019)

安裝完之後先來學習怎麼關掉 Vim,這個超重要,因為安裝完之後覺得好可怕,會很想要關掉它!

方法一:工具 > VsVim > Disable VsVim [True]

方法二:工具 > 環境 > 鍵盤 > VsVim.ToggleEnabled > 設定快捷鍵

可以自如開關 Vim 心裡應該感覺到輕鬆多了,就來了解一下 Vim 到底怎麼操作吧。
首先來介紹 Vim 的各種模式

  • Normal Mode
  • Insert Mode
  • Visual Mode
  • Command Line Mode

移動(Normal Mode)
h:左
j:下
k:上
l:右

w:到下一個單字頭

b:到前一個單字頭

e:到下一個單字尾

ge:到前一個單字尾

$:到行尾

0:到行首(包含空格)

^:到行首(不含空格)

G:到文件末行首
gg:到文件首行首

H:到目前視窗內容第一行
M:到目前視窗內容中間
L:到目前視窗內容最後一行

v:反白選取字元

V:反白選取整列

刪除(Normal Mode)
x:刪除一個字

dd:刪除整行

組合鍵
2j:下下
3w:向後到第3個單字頭
4e:向後到第4個單字尾
dw:刪除單詞
*游標需位於單詞第一個字

d$:從游標處刪除到最後

d2h:往左刪2個字
d3w:向後刪到第3個單字頭
d4e:向後刪到第4個單字尾
2dd:刪除兩行

復原(Normal Mode)
u:復原上個動作(與平常用的 Ctrl+z 同意)
Ctrl+R:取消復原上個動作(與平常用的 Ctrl+y 同意)
U:復原整行

重做(Normal Mode)
.:重複前一個動作

複製(Normal Mode)
y(yank):複製
yy:複製整行

貼上(Normal Mode)
p:於光標後貼上

P:於光標前貼上

取代(Normal Mode)
r+[要取代的文字]:取代一個字元

R+[要取代的文字]:取代多個字元直到按下Esc

:s/old/new:取代本行第一個相符的字(詞)
:s/old/new/g:取代本行所有相符的字(詞)
:#,#s/old/new/g:取代行號範圍所有相符的字(詞)
:%s/old/new/g:取代文件所有相符的字(詞)
:%s/old/new/gc:取代文件所有相符的字(詞),並逐一詢問是否取代

剪下(Normal Mode)
c:剪下並變更為插入模式

組合鍵
yw:複製到下一個單字頭
ce:剪到單字尾並變更為插入模式
c$:剪到行尾

摺疊/展開(Normal Mode)
za:摺疊/展開區塊

插入文字(Insert Mode)
i:在光標前變更為插入模式
Esc:回到 Normal Mode

I:在光標行前進入 Insert Mode
a(append):在光標後進入 Insert Mode
A:在光標行後進入 Insert Mode

o(open):往下插入一行並變更為插入模式

O:往上插入一行並變更為插入模式

顯示文件位置跟狀態
Ctrl+G

[數字]+G
17G:到第17行

搜尋
f+[字]:單行往後搜尋字(光標停在字上)
F+[字]:單行往前搜尋字(光標停在字前)
t+[字]:單行往後搜尋字(光標停在字上)
T+[字]:單行往前搜尋字(光標停在字前)
/+[單詞]:跨行往下搜尋單詞
?+[單詞]:跨行往前搜尋單詞
n:重複上個搜尋指令
N:反向重複上個搜尋指令
%:括號匹配搜尋(,[,{,},],)
:set ic or :set ignorecase:搜尋忽略大小寫
:set noic or :set noignorecase:取消搜尋忽略大小寫
:set hls or :set hlsearch :反白搜尋到的結果
:set hls or :set nohlsearch :取消反白搜尋到的結果

儲存
:w(與平常用的 Ctrl+s 同意)
:w [檔名]:另存新檔
[選取範圍]+:w [檔名]:將選取內容另存新檔

插入文件(Retrieving Files)
:r+[檔名]:將檔案內容插入到目前光標處

列出當前目錄清單
:!dir(MS-DOS)
:!ls(Unix)

刪除檔案
:!del [檔名](MS-DOS)
:!rm [檔名](Unix)

跳到另一個視窗
Ctrl+W Ctrl+W

退出 Vim(Normal Mode)
:q!(not save edit)
:wq(save edit)jj

幫助
:help

設定
:set

:set nocp or :set nocompatible:設定為非兼容模式
:set rnu:設定相對行號
:set rnu!:取消相對行號
:split [filename]:將檔案水平分割為兩個,沒指定檔名則分割當前檔案
:vsplit [filename]:將檔案垂直分割為兩個,沒指定檔名則分割當前檔案
:set nu:顯示行號
:set nonu:不顯示行號
:map:列出所有快速鍵
:map!:列出 Insert Mode 與 Command Line Mode 的快捷鍵


自訂 Vim 設定檔

Step 1:查看 VsVim 在哪些路徑中找 Vim 設定
:set vimrcpaths?

Step 2:於目錄下建立一個檔案,檔名為 _vimrc

Step 3:重啟 Visual Studio 加載設定
Step 4:查看目前 VsVim 加載哪個 Vim 設定路徑
set vimrc?


宣告新的 Vim 快捷鍵

:map [key] [command] //不特別指定模式
:nmap [key] [command] //Normal Mode的快捷鍵
:imap [key] [command] //Insert Mode的快捷鍵
:vmap [key] [command] //Visual Mode的快捷鍵
:cmap [key] [command] //Command Line Mode的快捷鍵

也可以這樣寫
:noremap [key] [command] //不特別指定模式
:nnoremap [key] [command] //Normal Mode的快捷鍵
:inoremap [key] [command] //Insert Mode的快捷鍵
:vnoremap [key] [command] //Visual Mode的快捷鍵
:cnoremap [key] [command] //Command Line Mode的快捷鍵


Use Editor Command Margin
狀態列擺放的位置

參考資料:
https://vimdoc.sourceforge.net/htmldoc/intro.html
https://github.com/HanielF/VimTutor

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *