vim 筆記


Vim 學習筆記

1. 常用命令

1.1 編輯模式

1.1.1 進入編輯模式

i : 在當前光標下開始插入
a : 在當前光標后面一個位置插入
o : 在當前行下一行開頭(新開一行)插入
I : 在當前行開頭插入
A : 在當前行行尾插入
O : 在當前行的上一行(新開一行)開頭插入

1.1.2 刪除

ctrl + h : 刪除一個字符
ctrl + w : 刪除一個單詞
ctrl + u : 刪除當前行

1.2. 普通模式

1.2.1 linux快捷鍵

ctrl + a 移動光標到本行開頭
ctrl + b 向前移動一個位置
ctrl + f 向后移動一個位置
ctrl + e 移動光標到本行末尾
ctrl + u 刪除本行
ctrl + w 刪除一個單詞
ctrl + h 刪除一個字符

1.2.2 技巧

ctrl + [ 代替 esc 來退出編輯模式
gi 可快速進入上次編輯位置並且進入插入模式

1.2.3 移動

h 左移
j 下移
k 上移
l 右移
w/W 移動到下一個單詞的開頭
e/E 移動到下一個單詞的結尾
b/B 回到上一個單詞的開頭	// 其中w/e/b的都是代表以非空白符分割的單詞,W/E/B 是以空白分割的單詞
f + char 可快速跳轉到第一要查找的字符位置,使用;來找下一個符合的位置,使用,來找前一個符合的位置
F + char 功能和 f + char 一樣,只不過是順序反過來搜索
t + char 可快速跳轉到需要查找的字符前一個位置,也可以使用;和, 
0 數字0 可快速移動光標到行首
$ 移動到行尾
gg 移動到文件的開頭
G 移動到文件的結尾
ctrl + o 返回上一個位置
H 快速移動到當前屏幕的開頭
M 快速移動到當前屏幕的中間
L 快速移動到當前屏幕的結尾
ctrl + u 上翻頁
ctrl + f 下翻頁
zz 把當前行置於屏幕中間

1.2.4 刪除

x 刪除一個字符, 可一次刪除多個字符 如: 4x 刪除4個
dw/daw 刪除一個單詞包括單詞后面的多個
diw 刪除一個單詞但是不刪除單詞后面的多個空格
dd 刪除整行 可刪除多行 如: 3dd
dt + 操作符(比如",),...任意字符) 刪除本行內所有字符直到到達第一個指定字符
d + 0(數字0) 從當前位置刪除到行頭
d + $ 從當前位置刪除到行尾
v 使用v進入單字符選擇模式,然后使用左右移動來選擇多個字符,然后使用x來刪除多個字符
V 使用V進入多行選擇模式,使用d來刪除多行
u 回退上一步

1.2.5 修改

r + char 替換字符(單次)
R + cahr 從當前位置輸入每一個字符將被輸入的字符替換
s 刪除當前字符,並進入插入模式
S 刪除整行並進入插入模式
c + 表達式 執行表達式並進行插入(caw=daw + 插入,ct= dt+ 插入...)
C 刪除當前行光標后的所有字符

1.2.6 查詢

使用/或者?進行前向或者反向搜索
使用n/N跳轉到下一個或者上一個匹配
使用*或者#進行當前單詞的前向和后向的匹配

1.3 命令模式(😃

1.3.1 常用命令

:set nu // 設置行號
:set autoindent // 開啟自動縮進
:q 退出
:w 保存
:q! 強制退出
:wq 保存退出
:ctrl + p 可查看執行的上一條命令
:r! echo % 當前位置插入本文件文件名
:r! echo %:p 當前位置插入文件全路勁

1.3.2 搜索替換

表達式: 行范圍 s/srcStr/totalStr/tag 如: 1,6 s/print/fmt/g
	 : 行范圍如果是% 則表示是全文替換 tag: g表示全局范圍,c表示確認,可以確認或者拒絕修改,n報告匹配次數但是不會進行替換
也可以用正則表達式進行替換
/Str 搜索結果但是不執行任何操作

1.4 可視模式

1. 在普通模式下按v即可進入可視模式
2. 可視模式下可以進行多選行和多選字符操作
3. 可視模式下可以使用gg和G 等命令
4. 在可視模式下多選后可進入命令模式執行普通模式下的命令如:'<,'> normal I"

1.5 多文件操作

1.5.1 buffer 緩沖區

1. 一個文件對應一個緩沖區
2. 命令模式下打開一個新的緩沖區 e + 文件名
3. ls : 列出當前所有緩沖區
4. 緩沖區切換:
    b + n(數字) 跳轉到第幾個緩沖區
    bprevious 前一個緩沖區
    bnext 后一個緩沖區
    bfirst 第一個緩沖區
    blast 最后一個緩沖區
    b buffer_name 切換到指定緩沖區(可tab補全)

1.5.2 window 窗口

一個緩沖區可以分割成多個窗口,每個窗口可以打開不同的緩沖區,每個窗口可以被無線分割

窗口分割

ctrl + w + s 水平分割
ctrl + w + v 垂直分割
或者命令模式下
:sp 水平分割 // sp a.py  打開a.py 並 水平分割
: vs 垂直分割 // vs b.py 打開b.py 並垂直分割

窗口切換

ctrl + w + w 窗口到下一個窗口
ctrl + w + h 切換到左窗口
ctrl + w + j 切換到垂直下窗口
ctrl + w + k 切換到垂直上窗口
ctrl + w + l 切換到右窗口

不同窗口不同buffer

切換到指定窗口使用e + buffer 即可

窗口移動

ctrl + w + H 移動到左邊
ctrl + w + J 移動到下面
ctrl + w + K 移動到上面
ctrl + w + L 移動到右邊

1.6 Vim常用技巧

1. vim a.py b.py -o // 同時打開兩個窗口打開兩個文件(橫向) -O (縱向)
2. ZZ // 普通模式下的保存退出,相當於命令模式下的:wq
3. :source ~/.vimrc // 不退出的情況下修改vimrc使之生效
4. 在可視化模式中選中字符或者單詞等后可以使用 U來把選中的字符改成大寫,u改成小寫
5. :qa 可退出所有窗口

2. vim 的 Text Object

2.1 文本對象操作方式

[number] <commond> [text object]
number 代表此命令操作次數 commond 是命令 d(delete), c(change), y(yank)
text object 文本對象 單詞w, 句子s, 段落p

c + i + 標識符  可以快速刪除以標識符開始以對應標識符結束的內容,並進行插入操作
v + aw 可視化選擇單詞 包括空格
v + iw 不包括單詞

3. 復制和粘貼

3.1 普通模式下的復制和粘貼

1. y(yank)復制,p(put)粘貼,d和p則實現了剪切復制
2. 也可以在可視模式下選擇多個自己想要的字符,按y復制,然后按p粘貼
3. 配合文本對象 使用yiw復制一個單詞,使用yy復制一行

3.2 插入模式下的復制和粘貼

1. 當vim 設置成autoindent 時,如果在別處復制的代碼粘貼到vim會造成代碼縮進錯誤這是需要設置set paste
2. 當繼續編輯時則需要再設置為set nopaste 這樣autoindent就會重新起作用

3.3 寄存器

當使用vim進行d,刪除或者y復制時,默認把這些數據保存到來無名寄存器中

使用自定義寄存器:

1. "" + 寄存器名字 + d/y 把數據復制到寄存器 // eg: "" + a + yy
2. 查看寄存器 reg a
3. 使用寄存器 "" + a + p

其他寄存器:

1. 復制專用寄存器"0

4. 宏

4.1 宏的使用

1. Vim 使用q 來錄制,同時使用q來結束錄制 // 錄制時需要跟上寄存器名稱 如: qa
2. 使用q{register}選擇要保存的寄存器 // qa
3. 使用@{register}回放寄存器中保存的命令 // @a

在復雜的操作中使用宏可以大大縮減工作量

5. Vim 補全

1. 使用ctrl + n 和 ctrl + p補全單詞 // 如果提示單詞多的話再次使用ctrl + n 或者 ctrl +p 選擇上一個或者下一個結果
2. 使用ctrl + x ctrl + f補全文件名 // 也可以使用ctrl + n 和 ctrl +p 來進行上下選擇
3. 使用ctrl + x ctrl + o補全代碼,需要插件 

6. Vim 更換配色

:colorscheme 顯示當前配色方案
:colorscheme ctrl + d 來顯示所有可用配色方案
:colorscheme + 方案名 來使用配色方案
可以下載網上配色方案如:https://github.com/flazz/vim-colorschemes/tree/master/colors 到
.vim/colors 下這樣Vim 就可以識別到該配色方案

7. 使用.vimrc 配置文件

1. vim ~/.vimrc // 編輯或者創建配置文件,所有持久的配置選項都放在這里
2. 常用配置:
 	備注: " 常用設置 
	set number: 設置行號
	set hlsearch: 高亮搜索
	set foldmethod=indent : 設置折疊方式
	let mapleader=',' : 設置"," 為leader
  	inoremap <leader>w <Esc>:w<cr> : 設置按鍵映射


8. 使用映射

8.1 可遞歸映射

基本模式映射(也是默認的模式 normal 下的映射)

:map - x : 以-代替x來進行刪除字符操作 // 注意這里是在普通模式下修改的映射 非持久化
如果想持久話映射那么:
map - x  // 在.vimrc文件中 

使用其他模式下的映射

:vmap / U // 用/ 代替U 轉換大寫 同樣如果需要持久化需要把命令寫入.vimrc
:imap <c-d> <Esc>ddi  //插入模式下的映射,這條命令代表ctrl + d 刪除一行並進入插入模式
:nmap 相當於map(vim 默認為normal模式)

8.2 非遞歸映射

任何時候都應該使用非遞歸映射

定義:
nnoremap/vnoremap/inoremap :定義非遞歸映射
inoremap jj <Esc>`^  // 定義非遞歸映射jj 代替esc ,同時回到編輯位置

9. Vim 插件

常見的插件管理器有: vim-plug, Vundle, Pathogen, Dein.Vim, volt

9.1 使用vim-plug 管理插件

1. vimrc 中添加以下腳手架代碼
    call plug#begin('~/.vim/plugged')
    需要安裝的插件// 示例: Plug 'mhinz/vim-startify'
    call plug#end()
2. 安裝
	命令模式下: PlugInstall vim-startify

9.2 目錄管理插件nerdtree

git地址: https://github.com/scrooloose/nerdtree
設置快捷鍵映射:
	nnoremap <leader>v : NERDTreeFind<cr> 定位文件位置並切換到目錄樹中所在位置 如:,v
	nnoremap <leader>g : NERDTreeFind<cr> 打開目錄樹 如:,g
ctrl + w + p 快速切換上一個window
注:所有對window的操作,這個同樣適用

9.3 文件模糊搜索工具ctrlp

git 地址: https://github.com/ctrlpvim/ctrlp.vim
快捷鍵映射:
let g:ctrlp_map = '<c-p>'// 進入vim 直接ctrl + p 就可以搜索文件
配合nerdtree 工具可以實現工作目錄快速定位 //,v
使用: ctrl + j 向下移動
使用: ctrl + k 向上移動

9.4 使用easymotion 快速定位字符位置

git 地址: https://github.com/easymotion/vim-easymotion
配置: nmap ss <Plug>(easymotion-s2)
使用:
	1. 在normal 模式下 使用綁定的ss 快捷鍵激活插件
	2. 然后搜索至多兩個字符 這時會出現高亮提示
	3. 選擇字母提示的高亮位置輸入該字母

9.5 使用vim-surround 來改變成對出現的字符

git 地址: https://github.com/tpope/vim-surround
ds (iw) + keyword // 刪除字符 比如: 刪除字符雙引號 ds + iw + "
cs (iw) + keyword // 改變字符 比如 改變()為[] cs + iw + ]  之所以用]不用[ 避免出現空格
ys (iw) + keyword // 增加字符 比如: 增加雙引號 ys + iw + "

9.6 使用fzf.vim 來進行模糊查找

git 地址: https://github.com/junegunn/fzf.vim
Ag[pattern] : 模糊搜索字符串
Files[PATh] : 模糊搜索目錄

示例:
搜索文件: :Files . // 列出當前目錄所有文件 
		 :Files ./test.py  直接定位到文件 按Esc退出命令模式
搜索字符串: :Ag char
移動: 使用ctrl + j 和 ctrl + k

9.7 使用far.vim 快速搜索替換字符串

git 地址: https://github.com/brooth/far.vim
使用方法:
	:Far char1 char2 **/*.py  // char1 是要被替換的字符串,char2 替換的字符串 **代表上層目錄,*.py 該目錄下所有的py文件,也可以指定具體的文件名如: cut.py,或者使用*表示所有的文件
	:Fardo  如果檢車沒有問題直接Fardo 執行命令就替換完成

9.8 使用 go-vim插件

git 地址: https://github.com/fatih/vim-go
1. ctrl + x + o // 全能補全
2. ctrl + n / p //選擇下一個或者上一個
3. ctrl + ] // 跳轉到引用函數/方法/結構體..定義
4. ctrl + o // 跳轉回來
5. ctrl + i // 向前跳
6. :GoFmt // 格式化代碼
7. :ReName  // 代碼重構,Enter后光標指向的單詞即可重命名
8. :GoImports // 自動導包
9. :w //保存后代碼自動格式化
10.:GoRun // 運行代碼

9.9 使用python-mode

git 地址: https://github.com/python-mode/python-mode

9.10 使用tarbar 快速查看代碼大綱

git 地址: https://github.com/majutsushi/tagbar
使用:
	TagbarToggle // 調出代碼大綱,再次操作則關閉  定義快捷鍵<leader>t來代替TagbarToggle

9.11 vim-commentary 快速注釋

git 地址: https://github.com/tpope/vim-commentary
命令:
	普通模式:
		gcc : 注釋
		gcgc: 	取消注釋
	可視模式:
		gc: 注釋和取消

10. tmux 使用

10.1 基本開啟退出命令

1. 開啟會話: tmux new -s test
2. 結束所有會話: tmux kill-server
3. 關閉指定會話: tmux kill-session -t test
4. 重新恢復會話(掛起狀態): tmux attach

10.2 常用命令

系統操作:

d 脫離當前會話;這樣可以暫時返回Shell界面,輸入tmux attach能夠重新進入之前的會話
D 選擇要脫離的會話;在同時開啟了多個會話時使用
? 列出所有快捷鍵, 按q退出
ctrl + z 掛起當前會話
r 強制重繪未脫離的會話(reload)
s 選擇並切換會話在多會話時使用
: 進入命令模式
[ 進入復制模式
] 粘貼
~ 列出提示信息緩存;其中包含了之前tmux返回的各種提示信息

窗口操作:

c 創建新的窗口
p 切換到上一窗口
切換到下一窗口
l 在前后兩個窗口切換
w 通過窗口列表切換
, 重命名窗口
. 修改當前窗口編號,相當於對窗口排序
f 在窗口中查找指定文本,匹配的窗口將會出現在列表中,便於窗口切換
& 關閉當前窗口
數字鍵 切換到指定窗口

面板操作:

" 上下分屏
左右分屏
關閉當前面板
將當前面板置於新窗口;即新建一個窗口,其中僅包含當前面板
Ctrl+方向鍵 以1個單元格為單位移動邊緣以調整當前面板大小
Alt+方向鍵 以5個單元格為單位移動邊緣以調整當前面板大小
Space 在預置的面板布局中循環切換;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
q 顯示面板編號
O 在當前窗口中選擇下一面板
方向鍵 移動光標以選擇面板
{ 向前置換當前面板
} 向后置換當前面板
Alt+o 逆時針旋轉當前窗口的面板
Ctrl+o 順時針旋轉當前窗口的面板

10.3 復制模式常用命令:

vi             emacs        功能
^              M-m          反縮進
Escape         C-g          清除選定內容
Enter          M-w          復制選定內容
j              Down         光標下移
h              Left         光標左移
l              Right        光標右移
L                           光標移到尾行
M              M-r          光標移到中間行
H              M-R          光標移到首行
k              Up           光標上移
d              C-u          刪除整行
D              C-k          刪除到行末
$              C-e          移到行尾
:              g            前往指定行
C-d            M-Down       向下滾動半屏
C-u            M-Up         向上滾動半屏
C-f            Page down    下一頁
w              M-f          下一個詞
p              C-y          粘貼
C-b            Page up      上一頁
b              M-b          上一個詞
q              Escape       退出
C-Down or J    C-Down       向下翻
C-Up or K      C-Up         向下翻
n              n            繼續搜索
?              C-r          向前搜索
/              C-s          向后搜索
0              C-a          移到行首
Space          C-Space      開始選中
               C-t          字符調序

10.4 常用配置:

# 設置ctrl + x 為命令前綴
  2 set -g prefix C-x
  3 set -g default-terminal "screen-256color"
  4 set -g display-time 3000
  5 set -g history-limit 65535
  6 # 取消 ctrl + c 命令前綴
  7 unbind C-b
  8 # 增加r 為重加載按鍵 
  9 bind r source-file ~/.tmux.conf \; display "Reloaded!"
 10 # 結束當前會話z相當於 kill session
 11 bind-key z kill-session
 12 # 按鍵映射
 13 #up
 14 bind-key k select-pane -U
 15 #down
 16 bind-key j select-pane -D
 17 #left
 18 bind-key h select-pane -L
 19 #right
 20 bind-key l select-pane -R
 21 # 分割窗口快捷鍵
 22 unbind '"'
 23 bind - splitw -v #分割成上下兩個窗口
 24 unbind %
 25 bind | splitw -h #分割成左右兩個窗口
 26 set-window-option -g mode-keys vi


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM