IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    vim 学习路径

    youngxhui发表于 2022-09-18 16:25:17
    love 0

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

    新手不要使用终端 vim。

    入门建议

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

    而最近两个月,我开始使用了 vim。使用 vim 来说,就像打字盲打一样,主要靠肌肉记忆,而不是思考。

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

    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 的。

    Vscode

     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
    


沪ICP备19023445号-2号
友情链接