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
参考资料: