1. 配置快捷鍵
1.四種模式:normal,insert,visual,command
2.映射
map:imap,nmap,vmap,cmap
noremap:inoremap,nnoremap,vnoremap,cnoremap
3.Visual Studio 快捷鍵
0.VsVim配置
Optins->VsVim->
Defaults:Use Editor Command Margin->False (否則,有命令框)
Keyboard:set your Keyboard ->include All Scopes
1.VsVimrc路徑
home下,_vsvimrc
2.Vs命令查看方式:
英語環境
Tools->Options->Environment->Keyboard
View->OtherWindow->Command Window
3.在vim中調用快捷命令
:vsc VAssistX.OpenFileInSolutionDialog<cr>
2.vim的常用命令
1.normal模式下
1.移動
.基本移動
hjkl
j:下
k:上
h:左
l:右
.單詞移動
w:word "跳轉到單詞的頭"
W:WORD
e:word's end "跳轉到單詞的結尾"
E:WORD's end
ge:word's end "跳轉到上一個單詞的結尾"
gE:WORD's end
b:back "跳轉到單詞的頭"
B:back "跳轉到WORD的頭"
.行移動
_: 跳轉到行的第一個字符
0: 跳轉到行首
$: 跳轉到行的最後一個字符
.縮進行
>> :向右縮進
<< :向左縮進
.段落移動:
{: 向上移動一個段落
}: 向下移動一個段落
[[:
]]:
{[:
}]:
.屏幕移動
gg: 跳轉到文件首部
G: 跳轉到文件結尾
12gg: 跳轉到第12行
zz: 當前光標移動到屏幕最中央
zt: 當前光標移動到屏幕最上方(top)
zb: 當前光標移動到屏幕最下方(bottom)
c-f: 下翻半頁
c-u: 上翻半頁
2.進入插入模式
i: 插入到光標前
I: 插入到行的最前面
a: 插入到光標後
A: 插入到行的最後面
s:刪除光標下的字符,並進入插入模式
S:刪除當前行所有字符,並進入插入模式
ce/cw: 刪除當前光標到word末尾處的字符,進入插入模式
C:刪除當前光標後的所有字符,並進入插入模式
o:插入到下一行
O:插入到上一行
3.撤銷和reDo
u: 撤銷
c-r: redo
4.替換
r: 用輸入替換光標下的字符
R:進入替換模式
5.查找:
.單行
f{char}: 從當前光標向後查找char。
F{char}: 從當前光標向前查找char
t{char}: 從當前光標向後查找char,光標落到char之前
T{char}: 從當前光標向前查找char,光標落到char之後
; :下一個char
, :上一個char
.整個文件中查找
/ : 從當前行向下查找
? : 從當前行向上查找
* : 從當前向下,查找當前光標下的word
# : 從當前向上,查找當前光標下的word
n : 下一個查找結果
N : 上一個查找結果
6.刪除
x:剪切當前光標下的字符
X:剪切當前光標前的一個字符
d{motion}:刪除
dl: 刪除當前光標下的一個字符
de/dw: 刪除當前光標下到word end的字符
db: 刪除當前光標下,到word head的字符
D: 刪除當前光標下到行尾的字符
7.複製
y{motion}:複製
yl: 複製當前光標下的一個字符
yy/Y:複製當前行
ye/yw: 複製當前光標到word end的字符
yb:複製當前光標前一字符到word head的字符
8.粘貼
p:粘貼到當前光標後
P:粘貼到當前光標前
9.點範式(.)
. :重複上次的修改(移動,刪除,增加)
10.組合命令
yyp:複製當前行到下一行
ddp:和下一行交換(刪除當前行,複製到下一行)
xp:交換兩個chr的位置
yi(:複製括號()中的內容 yi{ yi[ yi" yi'
di(:刪除括號()中的內容 di{ di[ di" di'
%:跳轉匹配的{}、()、[]
11.修改文本
J:將光標所在的下一行和本行連接,並且中間隔一個空格
gJ:將光標所在的下一行和本行連接(下一行的空格也連接)
2.insert模式下
c-o:暫時進入normal模式。一次命令後,回到插入模式。
3.visual模式(visual(可視行,可視塊))),select(選擇))
normal模式進入可視模式:
v:字符可視模式
V:行visual
c-v:塊visual
退出可視模式:
行/塊visual v-> visual v-> normal
字符可視模式 v ->normal
<esc> or <c-[>
塊模式下插入:
c-V:進入塊模式,並選擇好區域
I 在所選區域前,進入塊插入模式(插入的內容會在所有列都插入)
A 在所選區域後,進入塊插入模式(插入的內容會在所有列都插入)
c 刪除所選區域內容,並進入塊插入模式(插入的內容會在所有列都插入)
C 刪除所選區域以及所選區域後的所有內容,並且進入塊插入模式(插入的內容會在所有列都插入)
<esc> 退出到normal模式
c-g:切換可視模式和選擇模式
可用命令:
移動:hjkl
查找:f{char} ; , n/N
刪除:c C d x s
其他命令:
o: 切換選中區域的首和尾
U: 選中的字符全部大寫
u: 選中的字符全部小寫
~:選中的字符切換大小寫
組合命令:
ve/vw/viw:選中一個單詞
vu:光標下的字符小寫
vU:光標下的字符大寫
veu/U:選中一個單詞小寫/大寫
4.command模式
在normal模式或者visual模式下輸入冒號:,進入命令模式
normal模式下的命令,可以在命令模式下運行
command下也可以運行ex命令
:com[mand] 列出所有用戶自定義的命令
基本命令:
:w[a] [全部]寫入(保存)
:q[a] [全部]退出
:c[a] [全部]關閉buffer
:x[a] [全部]和:wq類型,當文件有修改時候,會寫入
:[range]copy/co/t {address} 將範圍內的行復制到目標地址處 {address}使用符號
:[range]move {address} 將範圍內的行移動到目標地址處
:normal 命令,在命令行中執行normal模式下的命令
如果是visual模式,會呈現
:'<,'>normal 會在每一行都執行命令
5.命令範圍
.command模式下
vim中,在單個文件中,
1.以行號爲地址
2.此外,還有一些特殊符號表示地址,例如:
% 整個文件(:1,$的簡寫形式)
. 光標所在位置。當前位置
1 文件第一行
$ 文件最後一行
0 虛擬行,位於文件第一行上方
'm 包含標記m的行
'< 高亮選區的起始行
'> 高亮選區的結束行
範圍的表示用逗號隔開,例如 add1,add2
:12,15d 表示刪除12行到15行內容
:[range]d[elete] [x] {count} "x到代表寄存器x裏"
.normal模式下
normal中的一些命令,可以指定運行次數,例如:
2dd 運行兩次dd->刪除兩行
2yy 運行兩個yy->複製兩行
3.mark和跳轉
mx:添加本文件"書籤"x
mX:添加全局"書籤"X
`x:跳轉到書籤x所在的行和列
'x:跳轉到書籤x所在行
``:跳轉到本文件上次離開的位置
gi:跳轉到上一次插入的位置
gv:跳轉到上一次進入visual的位置
4.VsVim的配置
1.重要配置
set backspace=indent,eol,start "退格鍵設置"
set clipboard=unnamed "默認的剪切寄存器"
set ignorecase "忽略大小寫"
2.推薦配置
1.註釋
:vnoremap ci :s/^/\/\/<cr>
:vnoremap cu :s/\/\//<cr>
:nnoremap ci :s/^/\/\/<cr>
:nnoremap cu :s/\/\//<cr>
2.相關配置
.單個文件中:
:inoremap jj <esc> "退出插入模式"
:noremap gd <c-]>zz "跳轉到定義"
:nnoremap gq == "代碼格式format"
:vnoremap gq ==
:nnoremap <space> za "摺疊"
:nnoremap zm :vsc VAssistX.ListMethodsInCurrentFile<cr> "函數列表"
:nnoremap cj :vsc VAssistX.FindReferencesinFile<CR> "當前文件中的引用"
:nnoremap ca :vsc VAssistX.FindReferences<CR> "查看所有引用"
:nnoremap cm :vsc File.OpenContainingFolder<CR> "打開所在文件夾"
:nnoremap zj :vsc Edit.QuickInfo<CR> "查看函數定義文檔"
:nnoremap zp :vsc VAssistX.RefactorImplementInterface<CR> "實現接口"
"visual模式中的查找"
:vnoremap * "/y/<C-r>/<CR>
:vnoremap # "/y?<C-r>/<CR>
.多文件
:nnoremap <c-o> :vsc View.NavigateBackward<CR>
:nnoremap <c-i> :vsc View.NavigateForward<CR>
"打開查看類的對話框
:nnoremap cs :vsc VAssistX.FindSymbolDialog<CR>
"打開查看文件的對話框
:nnoremap cf :vsc VAssistX.OpenFileInSolutionDialog<CR>
"open VAOutline
:nnoremap co :vsc VAssistX.VAOutline<CR>
"打開解決方案資源管理器
:nnoremap cv :vsc View.SolutionExplorer<CR>
"在文件中查找
:nnoremap ck :vsc Edit.FindinFiles<CR>
"end
3.配置文件
source filefullPath "讀取filefullPath的配置內容,並運行"
5.寄存器介紹和使用
vim提供了幾十組寄存器,用於保存文本
爲命令添加 "{register} 表示指定要使用的寄存器。若不指定,將缺省用unnamed無名寄存器
"x 表示引用了寄存器x
"" unnamed 無名寄存器,如果沒有指定要使用的寄存器,vim會缺省使用此寄存器
"_ 黑洞寄存器(實際上並沒有存儲,如果"_d{motion}會執行真正的刪除)
"0 複製專用寄存器 (複製的時候,不僅會把內容拷貝到無名寄存器中,還會拷貝到此寄存器)
"a-"z a-z寄存器(26個英文字母都是寄存器的名字)
"+ 系統剪貼板寄存器 (使用"+p來粘貼系統剪貼板的內容)(X11剪切板,用剪切、複製與粘貼命令操作)
"* 選擇專用寄存器 (X11主剪切板,用鼠標中斷操作)
"= 表達式寄存器.在插入模式下c-r= ,會進入命令行模式,輸入表達式回車之後的結果將插入文本中
"% 存儲了當前文件名
"# 存儲了輪換文件名
". 存儲了上次插入的文本
": 存儲了上次執行的Ex命令
"/ 存儲了上次查找的模式
使用示例:
"fyy 將複製的內容存儲到f寄存器
"fp 將f寄存器中的內容粘貼出來
:reg[ister] "{register} 查看{register}中的內容
6.宏
把命令序列錄製成宏
在normal,q鍵開始/停止錄製宏。
開始錄製:
q{register} 表示指定將宏錄製到哪個寄存器中
停止錄製:
再次按q,停止錄製
@{register} 表示執行寄存器中的命令
@@ 重複最近調用過的宏
[count]@{register} 執行count次宏 串行方式
:reg {register} 查看寄存器中的內容
追加:
qa 錄製按鍵操作,並覆蓋a寄存器中原有內容
qA 錄製按鍵操作,並追加到a寄存器中
在插入模式中,插入寄存器中的內容:
c-r{register} 將寄存器中的內容插入到文本中
.多次執行宏:
串行和並行。在處理錯誤的方式中,串行遇到錯誤,就返回。
1.串行
[count]@{register}
2.並行
:'<,'>normal @{register}
.迭代求值的方式給列編號
使用了表達式寄存器(=),以便插入的時候,可以進行運算
(不要試圖控制每次執行多少遍宏(vim 函數))
let i=0
qa 0f[ls<c-r>=i<esc>j
:let i+=1
q
.編輯宏
宏中使用的是鍵盤編碼,
如果使用<c-r>{register}的方式獲取的寄存器內容不一樣。
不過,可以使用將寄存器中的內容粘貼出來的方式。
1.輸出到文本中編輯
"{register}p 會粘貼到光標後,所以,用:put 輸出到下一行
:put {register}
將寄存器內容輸入到文本中
編輯完成之後,
"{register}dd 注意,Windows下,可能會將末尾的^M也粘貼進去。可以使用選中->刪除到寄存器中
將文本內容刪除並讀取到寄存器中
2.使用函數
:let @{register}=......
7.替換
:[range]s/{original}/{new}/[g] g表示全部替換,否則只替換第一個遇到的
8.小技巧
1.
ctrl+h 刪除前一個字符,相當於退格鍵
ctrl+w 刪除前一個單詞
ctrl+u 刪除至行首
2.
num<C-a> :第一個遇到的數字加num
num<C-x> :第一個遇到的數字減num
tips:
:help [ index幫助文檔中,所有命令