需要在电脑上安装neovim,在vscode中安装VSCode Neovim插件。
配置是在mac上测的,windows上用着有一点区别,需要自己测试。

neovim的init.vim

" Cond helper
function! Cond(Cond, ...)
  let opts = get(a:000, 0, {})
  return a:Cond ? opts : extend(opts, { 'on': [], 'for': [] })
endfunction
" 取消默认事件用
function! DoNothing()
endfunction 
"-----------------------安装插件----------------------
call plug#begin()
" 在 VIM 模式下使用普通 easymotion
Plug 'easymotion/vim-easymotion', Cond(!exists('g:vscode'))
Plug 'tpope/vim-surround'
Plug 'tpope/vim-repeat'
Plug 'wellle/targets.vim'
Plug 'yianwillis/vimcdoc'
" 快速范围
" Plug 'unblevable/quick-scope'
" 快速移动
Plug 'smoka7/hop.nvim'
call plug#end()
"-------------------------------------------------------


"--------------------基础配置--------------------
"-- 使用相对行号
set number
set relativenumber
"-- 高亮所在行
set cursorline 


" 启用搜索高亮 
set hlsearch
" 设置高亮颜色
highlight Search guifg=NONE guibg=#5f00af
" 
"-- 缩进2个空格等于一个Tab
set tabstop=2
set softtabstop=2
set shiftround
" 禁止产生交换文件
set noswapfile
"-------------------------------------------------------
"-----------------------修改键绑定----------------------
" J向下移动5行
nnoremap J 5j
vnoremap J 5j
" K向上移动5行
nnoremap K 5k
vnoremap K 5k
" H移动到行首
noremap H ^
nnoremap H ^
vnoremap H ^
" L移动到行尾
noremap L g_
nnoremap L g_
vnoremap L g_
"重新配置y,将复制内容写入系统剪切板 
nnoremap y "+y
vnoremap y "+y


"搜索时,把搜索内容居中 
nnoremap n nzz
nnoremap N Nzz
vnoremap n nzz
vnoremap N Nzz


" 可视化模式选中文本,// 搜索选中文本 
vnoremap // y/<c-r>"<cr>
" ----------- 功能性 开始------------------
" 上下移动选中文本
vnoremap <A-k>  :move '<-2<CR>gv-gv 
vnoremap <A-j>  :move '>+1<CR>gv-gv 
" 修改.的功能
vnoremap .  :normal! .<CR>


" ----------- 功能性 结束------------------
"------------ leader 开始 ------------------
" 将leader键配置为空格键(注意:这个配置要放到其他leader配置之前,否则其他的leader配置不效果)
let g:mapleader=" "


" leader + enter 取消搜索高亮
noremap <leader><CR> :nohlsearch<CR>


" leader + v 把光标下单词替换为最近一次复制内容
"nnoremap <leader>v viw"+p
"vnoremap <leader>v viw"+p
nmap <leader>v viw"+p
" 
nmap <leader>' ysiw'el
nmap <leader>` ysiw`el
" 搜索文件中的中文
nnoremap <leader>ch /[\u4e00-\u9fa5]\+<CR>




"  可视化选中函数或对象
nnoremap <leader>vf V$%
"  删除函数或对象
nnoremap <leader>df V$%d
"  复制函数或对象
nnoremap <leader>yf V$%y
"  html标签跳转到开始标签的结束>
nnoremap <leader>tl ^%
vnoremap <leader>tl ^%
"------------ leader 结束 ------------------


"--------------配置窗口 开始------------------
" 取消s的默认事件
vnoremap s <NOP> 
nnoremap s <NOP>
vnoremap S <NOP> 
nnoremap S <NOP>


" 分屏快捷键 (只在nvim中生效!!!vscode中是下方调用vscode的快捷键实现)
nnoremap sv :vsp<CR>
nnoremap sh :sp<CR>
"--------------配置窗口 结束------------------


" plugin settings   start ----------


" ----------
" easymotion
" ----------


"更改 Easymotion 的颜色
hi EasyMotionTarget guifg=black guibg=white


" ----------
" Quick-scope
" ----------


" 更改Quick-scope 的颜色
" highlight QuickScopePrimary guifg='#afff5f' gui=underline ctermfg=155 cterm=underline
" highlight QuickScopeSecondary guifg='#5fffff' gui=underline ctermfg=81 cterm=underline


" ----------
" hop
" ----------


lua << EOF
require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
EOF


nnoremap <silent> f :lua require('hop').hint_char1({ direction = require('hop.hint').HintDirection.AFTER_CURSOR, current_line_only = true})<CR>
nnoremap <silent> F :lua require('hop').hint_char1({ direction = require('hop.hint').HintDirection.BEFORE_CURSOR, current_line_only = true})<CR>
nnoremap <silent> t :lua require('hop').hint_char1({ direction = require('hop.hint').HintDirection.AFTER_CURSOR, current_line_only = true, hint_offset = -1 })<CR>
nnoremap <silent> T :lua require('hop').hint_char1({ direction = require('hop.hint').HintDirection.BEFORE_CURSOR, current_line_only = true, hint_offset = 1 })<CR>




" plugin settings   end ----------




if exists('g:vscode')
    " VSCode 生效 
        " --------- 资源管理器操作  开始----------
    " 在当前目录创建文件
    nnoremap <leader>a <Cmd>call VSCodeNotify('explorer.newFile')<CR>


    " 在当前目录创建文件夹
    nnoremap <leader>A <Cmd>call VSCodeNotify('explorer.newFolder')<CR>


        " --------- 资源管理器操作  结束----------
        " --------- 文本操作  开始-------
        " 折叠代码
        nnoremap zc <Cmd>call VSCodeNotify('editor.fold')<CR>


        " 展开折叠代码
        nnoremap zo <Cmd>call VSCodeNotify('editor.unfold')<CR>


    " 跳过折叠代码(<silent>表示不希望显示提示信息)
    nnoremap zj <Cmd>call VSCodeNotify('editor.gotoNextFold')<CR>
    nnoremap zk <Cmd>call VSCodeNotify('editor.gotoPreviousFold')<CR>




    " 智能修复
    vnoremap <D-.> <cmd>call VSCodeNotify('noop', 1)<CR><Esc><cmd>call VSCodeNotify('editor.action.quickFix')<CR>


    " 行注释 
    "vnoremap <D-/> <cmd>call VSCodeNotify('noop', 1)<CR><Esc><cmd>call VSCodeNotify('editor.action.commentLine')<CR>
        vnoremap <D-/> <Cmd>call VSCodeNotify('editor.action.commentLine')<CR>
        noremap <D-/> <Cmd>call VSCodeNotify('editor.action.commentLine')<CR>
        inoremap <D-/> <Cmd>call VSCodeNotify('editor.action.commentLine')<CR>
        " --------- 文本操作  结束-------
        " --------- 多窗口管理  开始--------


    " 水平分屏
    nnoremap sv <Cmd>call VSCodeNotify('workbench.action.splitEditorRight')<CR>
    " 将编辑器移动到下一组
    nnoremap Sl <Cmd>call VSCodeNotify('workbench.action.moveEditorToNextGroup')<CR>


    " 将编辑器移动到上一组
    nnoremap Sh <Cmd>call VSCodeNotify('workbench.action.moveEditorToPreviousGroup')<CR>
    
        " 关闭组内其他编辑器
    nnoremap so <Cmd>call VSCodeNotify('workbench.action.closeOtherEditors')<CR>
    " 关闭其他组中编辑器
    nnoremap sO <Cmd>call VSCodeNotify('workbench.action.closeEditorsInOtherGroups')<CR>
    " 关闭当前编辑器
    nnoremap sc <Cmd>call VSCodeNotify('workbench.action.closeActiveEditor')<CR>
    " 关闭当前组  
    nnoremap sC <Cmd>call VSCodeNotify('workbench.action.closeEditorsAndGroup')<CR>


    " 聚焦到左侧编辑器
    nnoremap <A-h>    <Cmd>call VSCodeNotify('workbench.action.focusLeftGroup')<CR>


        " 聚焦到右侧编辑器
    nnoremap <A-l>    <Cmd>call VSCodeNotify('workbench.action.focusRightGroup')<CR>


        " 打开上一个编辑器
    nnoremap sh    <Cmd>call VSCodeNotify('workbench.action.previousEditor')<CR>


    " 打开下一个编辑器
    nnoremap sl    <Cmd>call VSCodeNotify('workbench.action.nextEditor')<CR>


        " 切换编辑器组大小 
        nnoremap sm <Cmd>call VSCodeNotify('workbench.action.toggleEditorWidths')<CR>


        " --------- 多窗口管理  结束--------
else
    "Neovim 生效
        " f4 格式化json
        nnoremap <F4> :%!python3 -m json.tool<CR>
endif

vscode 的 keybindings.json 配置

下面这几个快捷键需要取消默认键绑定,vscode-neovim.send是把这些按键交给neovim处理,下面的注释功能的实现都在init.vim中。

[
// visual模式选中文本,cmd+.代码提示
  {
    "key": "cmd+.",
    "command": "vscode-neovim.send",
    "when": "editorFocus && neovim.mode == 'visual'",
    "args": "<D-.>"
  },
  // 代码注释
  {
    "key": "cmd+/",
    "command": "vscode-neovim.send",
    "when": "editorFocus",
    "args": "<D-/>"
  },
 //visual模式选中文本向下移动一行代码
  {
    "key": "alt+j",
    "command": "vscode-neovim.send",
    "args": "<A-j>"
  },
// visual模式选中文本向上移动一行代码
  {
    "key": "alt+k",
    "command": "vscode-neovim.send",
    "args": "<A-k>"
  },
]

vscode 的 settings.json

  /*-------------neovim相关配置  开始---------------------*/
  /* neovim配置 开始 */
  "vscode-neovim.highlightGroups.highlights": {
    "IncSearch": {
      "backgroundColor": "theme.editor.findMatchBackground",
      "borderColor": "theme.editor.findMatchBorder"
    },
    "Search": {
      "backgroundColor": "theme.editor.findMatchHighlightBackground",
      "borderColor": "theme.editor.findMatchHighlightBorder"
    },
    "Visual": {
      "backgroundColor": "theme.editor.selectionBackground"
    },
  },
  "vscode-neovim.neovimExecutablePaths.darwin": "/usr/local/bin/nvim",
  "extensions.experimental.affinity": {
    "asvetliakov.vscode-neovim": 1
  },
  /* neovim配置 结束 */

铁牛 👁 👁
2 声望0 粉丝