需要在电脑上安装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配置 结束 */
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。