说起来已经很久很久都没有写博客了。从毕业到工作,这段时间感觉很忙很忙,失去了自己思考的时间,每天感觉像流水线上的机器,不停的写代码写代码,自己本身却没有多大的提升。
新手不要使用终端 vim。
之前断断续续的写过一些 vim 的相关文章,和断断续续的使用 vim。 之前一直想着把 vim 当作 IDE 使用。但是繁琐的配置和一些不敬如人意的地方,导致在使用过程中会逐步的放弃。
而最近两个月,我开始使用了 vim。使用 vim 来说,就像打字盲打一样,主要靠肌肉记忆,而不是思考。
不是把 vim 当作 IDE,而是把 IDE 当 vim。 目前,大多数的 IDE 都会有 vim 的相关 keymap 设置,而我目前使用的工具主要是 Vscode 和 Goland。 这两款工具都对 vim 有良好的支持。
针对 vim 上手困难,首先的一个困难我觉得来自于它的模式,说实话,从我接触电脑来说,无模式感觉是一种正常的情况。打开 word,可以直接进行编辑,打开 IDE,可以直接进行编码,这种情况对与我来说那就是理所当然,就应该是这样。
而这些对于 vim 来看,有显示的那么反直觉,打开后无从下手,但是当你学会编辑,需要移动的时候,不停的在 normal 和 insert 两个模式换来换去。
这些对于刚刚入手 vim 来说,都将成为放弃的理由。
当你逐渐了解了 vim 的模式之后,剩下的就是 vim 的命令,或者说是快捷键。
首先就是移动,通过 h
,j
,k
,l
四个键来进行光标移动,而不是我们习惯的方向键(虽然方向键也可以移动),熟练使用这四个键进行光标移动绝对是入门 vim 的重要点,刚刚开始的时候是在强迫自己使用这四个键来进行移动,下意识的练习才能使自己不断的掌握 vim 的基本操作。
除了光标的移动,那么剩下的最重要的功能就是编辑了。在编辑过程中,单单就插入来说就有多个快捷键,例如 i
,I
,a
,A
,o
,O
等,都可以从 normal 模式转化为 insert 模式,但是每个命令又有细微的差别,例如 a
可以理解为 append ,那么就是在光标都追加单词,而 i
可以记忆为 insert ,表示为光标前添加。
为了熟练的掌握这些命令,在刚刚开始使用的时候,嘴里或者心里都会默念一些 “口诀” 。
例如我修改引号内代码,就念 change inner " 手上对应的 c
,i
,⇧ '
。
但是还有一个问题,你需要知道这些快捷键,你才能在心中默念出相关“口诀”,vim的相关命令比较多,而且同一键在不同的情况下代表的含义是不一样的,比如上述提到的 i
,可以是 insert
,还可以是 inner
。
这些操作都不需要任何的插件,也不需要任何的设置,对于 vim 来说,这些操作都是一致的。
这里我贴出我的 vim 配置。分别是 vscode 和 goland 的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
{
"vim.easymotion": true,
"vim.incsearch": true,
"vim.useSystemClipboard": true,
"vim.useCtrlKeys": true,
"vim.hlsearch": true,
"vim.insertModeKeyBindings": [
{
"before": [
"j",
"j"
],
"after": [
"<Esc>"
]
}
],
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": [
"<leader>",
"d"
],
"after": [
"d",
"d"
]
},
{
"before": [
"<C-n>"
],
"commands": [
":nohl"
]
},
{
"before": [
"K"
],
"commands": [
"lineBreakInsert"
],
"silent": true
},
{
"before": [
"leader",
"="
],
"commands": [
{
"command": "editor.action.formatDocument"
}
]
},
{
"before": [
"leader",
"g"
],
"commands": [
{
"command": "go.test.generate.function"
}
]
}
],
"vim.leader": "<space>",
"vim.handleKeys": {
"<C-a>": false,
"<C-f>": false
},
"editor.lineNumbers": "relative"
}
|
Goland (IDEA)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
"" Source your .vimrc
"source ~/.vimrc
let mapleader=" "
"" -- Suggested options --
" Show a few lines of context around the cursor. Note that this makes the
" text scroll if you mouse-click near the start or end of the window.
set scrolloff=5
set so=5
"set ideajoin
"set idearefactormode=keep
"set relativenumber
set nu
set showmode
set relativenumber
set clipboard+=unnamed
set clipboard+=ideaput
set virtualedit=onemore
"set cursorline
set keep-english-in-normal
" Do incremental searching.
set incsearch
" Don't use Ex mode, use Q for formatting.
map Q gq
set surround
set multiple-cursors
set commentary
set argtextobj
" set easymotion
set textobj-entire
set ReplaceWithRegister
set exchange
"" -- Map IDE actions to IdeaVim -- https://jb.gg/abva4t
"" Map \r to the Reformat Code action
"" Map <leader>d to start debug
"map <leader>d <Action>(Debug)
"" Map \b to toggle the breakpoint on the current line
"map \b <Action>(ToggleLineBreakpoint)
" map <leader>f <Plug>(easymotion-s)
" map <leader>e <Plug>(easymotion-f)
nmap <leader>d <Action>(Debug) " Debug 当前方法
map <leader>r <Action>(RenameElement) " 重命名变量
noremap <leader>c <Action>(Stop)
noremap <leader>z <Action>(ToggleDistractionFreeMode) " 禅模式
map <leader>s <Action>(SelectInProjectView)
map <leader>a <Action>(Annotate)
map <leader>h <Action>(Vcs.ShowTabbedFileHistory)
map <S-Space> <Action>(GotoNextError)
map <leader>b <Action>(ToggleLineBreakpoint) " 打断点
map <leader>o <Action>(FileStructurePopup)
" Editor
nmap <leader>= <Action>(ReformatCode)
" Find more examples here: https://jb.gg/share-ideavimrc
" 全局查找
noremap g/ <ESC>:action FindInPath<CR>
noremap / <ESC>:action Find<CR>
noremap <leader>g <ESC>:action Generate<CR>
set ideajoin
|