5

vim 学习路径

 2 years ago
source link: https://youngxhui.top/2022/09/vim%E5%85%A5%E9%97%A8/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

vim 学习路径

 2022-09-18  2022-09-18  约 1618 字   预计阅读 4 分钟   25 次阅读    0 条评论  

说起来已经很久很久都没有写博客了。从毕业到工作,这段时间感觉很忙很忙,失去了自己思考的时间,每天感觉像流水线上的机器,不停的写代码写代码,自己本身缺没有多大的提升 😭

新手不要使用终端 vim。

之前断断续续的写过一些 vim 的相关文章,和断断续续的使用 vim。 之前一直想着把 vim 当作 IDE 使用。但是繁琐的配置和一些不敬如人意的地方,导致在使用过程中会逐步的放弃。

而最近两个月,我开始使用了 vim。使用 vim 来说,就像打字一样:在打字的时候我们大部分的时间是在思考内容,而手指敲击键盘只是一种肌肉记忆,可以准确的打出我们要的文字,而刚刚开始打字的时候,我们基本是看着键盘,一个符号一个符号的进行编辑,看一下键盘敲一个,而随着熟练度的上升,我们可以做到盲打,对于键位来说,基本是靠肌肉记忆,不会刻意的看键盘了。

不是把 vim 当作 IDE,而是把 IDE 的 keymap 设置 vim。 目前,大多数的 IDE 都会有 vim 的相关 keymap 设置,而我目前使用的工具主要是 Vscode 和 Goland。 这两款工具都对 vim 有良好的支持。

Vim 的模式

针对 vim 上手困难,首先的一个困难我觉得来自于它的模式,说实话,从我接触电脑来说,无模式感觉是一种正常的情况。打开 word,可以直接进行编辑,打开 IDE,可以直接进行编码,这种情况对与我来说那就是理所当然,就应该是这样。

而这些对于 vim 来看,有显示的那么反直觉,打开后无从下手,但是当你学会编辑,需要移动的时候,不停的在 normal 和 insert 两个模式换来换去。

这些对于刚刚入手 vim 来说,都将成为放弃的理由。

当你逐渐了解了 vim 的模式之后,剩下的就是 vim 的命令,或者说是快捷键。

首先就是移动,通过 g,h,j,k 四个键来进行光标移动,而不是我们习惯的方向键(虽然方向键也可以移动),熟练使用这四个键进行光标移动绝对是入门 vim 的重要点,刚刚开始的时候是在强迫自己使用这四个键来进行移动,下意识的练习才能使自己不断的掌握 vim 的基本操作。

除了光标的移动,那么剩下的最重要的功能就是编辑了。在编辑过程中,单单就插入来说就有多个快捷键,例如 i,I,a,A,o,O等,都可以从 normal 模式转化为 insert 模式,但是每个命令又有细微的差别,例如 a 可以理解为 append ,那么就是在光标都追加单词,而 i 可以记忆为 insert,表示为光标前添加。

为了熟练的掌握这些命令,在刚刚开始使用的时候,嘴里或者心里都会默念一些“口诀”。

例如我修改引号内代码,就念 change inner " 手上对应的 ci⇧ '

但是还有一个问题,你需要知道这些快捷键,你才能在心中默念出相关“口诀”,vim的相关命令比较多,而且同一键在不同的情况下代表的含义是不一样的,比如上述提到的 i,可以是 insert,还可以是 inner。

这些操作都不需要任何的插件,也不需要任何的设置,对于 vim 来说,这些操作都是一致的。

这里我贴出我的 vim 配置。分别是 vscode 和 goland 的。

Vscode

{
    "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)

"" 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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK