VSCode和Idea快捷键记录
本文记录一下在VSCode和IDEA中所配置的快捷键以便查阅:
编辑
1.Ctrl+Shift+D:选中光标位置所在的单词出现。
2.Ctrl+Shift+L:选中光标位置所在单词的所有出现。此时使用i或c/d可以实现多光标编辑(VSCode和IDEA中的Vim插件使用i有点问题,可使用c作为替代)
3.Ctrl+Right/Left定位选中单词的下/上一个出现。(VSCode,IDEA中配置快捷键失效)
4.Ctrl+D/U上下移动整个屏幕。
5.gd跳转到函数/变量定义处。
6.ge/gE跳转到下/上一个error处。
7.gm/gM跳转到下/上一个method处。(IDEA)
8.<leader><leader>w/b快速定位光标前后单词。(通过easymotion实现)
9.s+目标单词的前两个字母快速定位光标所在行的目标单词。(通过sneak实现)
10.Ctrl+;输入字母快速定位文件中该字母的出现位置。(通过ace jump插件实现)。
11.Alt+Left/Right跳转到上/下一个跳转位置。
12.gb选中光标所在单词,再次按gb选中和前面单词的下一个出现。按下c或者i可以进行多光标编辑。(IDEA中不起作用)
13.yL复制光标到该行末尾的内容(L已被映射为$);y^复制光标到该行开头的内容(虽然H已被映射为^,但在VSCode中yH不起作用,在Obsidian中起作用)
14.3yy复制光标所在行以及之后的两行共3行。
15.123G跳转到123行。
16.V+j/k快速选中整行。
17.V/pattern+n快速选中当前行到匹配pattern所在行。
18.gv:重新选择刚才选择的块
19.gb:在当前单词处添加光标,重复gb在当前单词的下一个匹配处添加光标。
20.ctrl-v + j/k:选择当前行光标所在字符,j/k选择上下行该光标对应位置字符。
21.选择代码块后,可通过:s/match/replace将代码块中的match替换为replace。
22."0p:粘贴使用yy复制的内容,该内容不会被dd覆盖。见参考资料5。
23.J:将下一行和当前行合并,没有对应的K操作。
24.i/a:在光标前后插入,i对应insert,a对应append。
25.ea:在光标所在单词后插入。
26.gU后选中:将选择的文本转换为大写。
27.gu后选中:将选择的文本转换为小写。
28.gh:展示光标所在位置的变量的tooltip(提示)。
29.>和<,对选择的代码进行缩进。
30.Alt+Shift+F:对文件进行格式化。
31.Alt+鼠标点击,在指定位置创建多光标。
32.在visual模式下选中单词后,按下gb可以选择下一个该单词的出现,从而实现多光标编辑。
参考资料:
切换
1.<leader>h和<leader>l切换tab页。
2.<leader>n定位explorer,通过j/k等选择、新建、重命名文件。(通过NERDTree插件实现)
3.Ctrl+P根据文件名搜索explorer中的所有文件并通过enter打开。
4.~ + 1定位文件进行编辑,~ + 2定位终端窗口。
其它
1.Ctrl+Shift+F全局搜索。
2.Ctrl+,打开settings。
3.F2搜索commands(VSCode)。
4.Ctrl+Shift+R重载窗口(VSCode)。
5.Ctrl+T打开终端。
6.Ctrl+w或者<leader>q关闭当前文件。
7.Ctrl+K+W关闭所有文件。
文本选择(包括选择、删除、替换、复制、缩进)
选择、删除、替换、复制、缩进分别对应v, d, c, y, >。(visual/delete/change/yank/indent)
首先先根据参考资料1理解text object的概念:
以选择模式(v)为例:

解释:
viw:visual select inner a word
di":delete the content which surrounded by ""
1.viw:选中光标所在单词(不包括单词末尾空格/space)。如下图所示:

2.vaw:选中光标所在单词(包括单词末尾空格/space)。如下图所示:

3.viW/vaW:选中更广义的单词(,、;等不会中断识别):

上述viw会被,中断。

使用viW则不会被,中断。
4.vis:选中光标所在句子,句子通过.分隔。vas则会多选中末尾一个空格(对代码来说不太好用,但理解s表示句子的概念对理解Vim-surround中的操作有帮助。没有viS/vaS)


5.vip:选中光标所在的段落,段落通过空行分割。vap会多选中末尾空行直至下一个段落。(没有viP/vaP)


6.vi{:选中光标所在位置外部的第一个{}内的所有内容,不包括{}本身。(vi(, vi[, vi", vi'同理):

7.va{:选中光标所在位置外部的第一个{}内的所有内容,包括{}本身。(vi(, vi[, vi", vi'同理):

8.vit:选中光标所在的HTML tag中的内容。

9.ci(:可以直接修改修改最近的括号中的内容。(参考:我今天刚意识到的超实用 Vim 小技巧_哔哩哔哩_bilibili)
PS:将上述的v替换为c/d/y/>可以实现相同范围的选择。
参考资料:
Vim-surround
add/change/delete surrounding for content
add:ys [text object] Mark
change:ds Mark
delete:cs srcMark dstMark
add
1.ysiw":给光标所在单词添加""。

2.yss":给光标所在行添加""。

3.ysip":给光标所在代码段添加""。(注意此处需要i,上述VSCode中yss不需要i,IDEA中需要写ysis,但根据参考资料5该特性并没有在IDEA中实现)

4.ysiw(:给光标所在单词添加(),额外添加空格。(yss(和ysip(同理)

5.ysiw):给光标所在单词添加(),不额外添加空格。(yss)和ysip)同理)

6.ysiwt p:给光标所在单词添加HTML tag <p></p>。(ysst p和ysipt p同理)



change
1.cs"':将光标所在单词最近的""变为''。

2.cs"{:将光标所在单词最近的""变为{},并添加额外空格。(cs"}不会添加额外空格)

3.cs"t p:将光标所在单词最近的""变为对应HTML tag <p></p>。

delete
1.ds":删除光标所在单词最近的""。

2.ds{:删除光标所在单词最近的{},并删除周围空格,如果没有则不删除。(ds}不会删除周围空格)

3.dst:删除光标所在单词最近的HTML tag。

参考资料:
- 好用的Vim插件Vim-Surround介绍_哔哩哔哩_bilibili
- 指尖飞舞:vscode + vim 高效开发(vim-surround)_哔哩哔哩_bilibili
- GitHub - tpope/vim-surround: surround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease
- https://youtrack.jetbrains.com/issue/VIM-769/inbuilt-vim-surround-support-in-ideavim
- https://youtrack.jetbrains.com/issue/VIM-2004/Cannot-surround-full-line-using-yss-command
VSCode插件NERDTree
操作如下:

VSCode光标移动到wrap line末尾
参考资料:
VSCode将redo映射为U
- 打开VSCode中Vim的Ctrl映射
"vim.useCtrlKeys": true,
- 在
.vimrc中remap
" remap redo to U
nnoremap U <C-r>
参考资料:
VSCode配置复制粘贴操作
- 使用
p替换在visual mode下选中的text而不会替换剪切板的内容
在.vimrc中添加如下内容:
" delete without yanking
nnoremap <leader>d "_d
vnoremap <leader>d "_d
" replace currently selected text with default register
" without yanking it
vnoremap <leader>p "_dP
PS:在VSCode中生效,在VSCode Insiders中不生效
参考资料:
多光标编辑
VSCode原生模式
- 鼠标定位到目标行目标编辑位置。
Ctrl+Alt+down/up创建多个光标。right/down更改光标位置- 便可以直接进行多光标编辑
Vim模式
替换换行符

参考资料:
跳转到代码块 (block) 的开头和末尾
1.[[:跳转到上一个顶层代码块(block)的开头。
2.]]:跳转到下一个顶层代码块(block)的开头。
3.[m:跳转到上一个方法/函数(method/function)的开头。
4.]m:跳转到下一个方法/函数(method/function)的开头。
参考资料:
VSCode Vim Tips
参考资料:
VSCode Vim重新映射已有的快捷键
nnoremap gb ]]
nnoremap gB [[
nnoremap gm ]m
nnoremap gM [m
参考资料:
VSCode vim d键重新映射
vnoremap p P
vnoremap P p
vnoremap d "_d
vnoremap "_d d
参考资料:
1 How do I replace-paste yanked text in vim without yanking the deleted lines? - Super User
copy paste - How to delete (not cut) in Vim? - Stack Overflow
Vim Visual 模式粘贴小知识_哔哩哔哩_bilibili
replace - In Vim is there a way to delete without putting text in the register? - Stack Overflow
copy paste - How to delete (not cut) in Vim? - Stack Overflow
VSCode定位explorer快捷键(shortcut)
Ctrl+0
参考资料: