一、与浏览器配合使用1. 下载Vimium插件2. 基本使用1滚动这个就hjkl上下左右滚动gg顶部G底部和vim一样(2) 标签页相关x 关闭标签 t 新建标签 J / K 切换标签(3) 前进后退对于某个浏览页都有历史页面啥的这个就是回溯H → 后退Back L → 前进Forward4搜索和点击搜索就是/之后Nn往上下查找点击就是f之后按住对应的字母就点击到对应位置。总结而言其实不能完全脱离鼠标因为有些需要选中的其实做不到可能后面还会进化把3 设置初始页面默认谷歌的初始页面是chrome://newtab插件无法使用我们把他改成https://www.google.com。1 下载插件New Tab Redirect4. 常用快捷键ctrl l 把输入重定向到网址栏 ctrl w 关闭当前窗口 ctrl t 新开一个窗口 进入Vimium模式下 按住 b 就可以在搜索收藏夹里面的内容非常方便。二、VIM如何像vscode一样查看git diff因为我们用ai写代码每给我改一次我就commit一次之后使用vscode可以方便的看出来ai给我改了什么。但是我也想用使用vim达到这个效果。1. 安装新版本nvimcd~wgethttps://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gztarxzvf nvim-linux-x86_64.tar.gz2. 如果你有好几个nvim那么配置这个刚下再的为默认把下面这行加到你的 ~/.bashrc 末尾exportPATH$HOME/nvim-linux-x86_64/bin:$PATH然后执行source~/.bashrc 再检查whichnvim nvim--version理想结果 /home/yzh/nvim-linux-x86_64/bin/nvim NVIM v0.11.63. 安装lazy.nvim确认 nvim--version已经是0.8 之后再执行gitclone https://github.com/folke/lazy.nvim\~/.local/share/nvim/lazy/lazy.nvim接着把 ~/.config/nvim/init.lua 改成最小可用版vim.opt.rtp:prepend(vim.fn.expand(~/.local/share/nvim/lazy/lazy.nvim))require(lazy).setup({{nvim-lua/plenary.nvim,},{sindrets/diffview.nvim, dependencies{nvim-lua/plenary.nvim},},})最后安装插件 启动 nvim 后执行 :Lazysync如果正常再执行 :DiffviewOpen 前提是你当前目录在一个 Git 仓库里并且文件有改动。4. 一些常用配置如显示行号如最左侧显示文件类型图标如有面代码改动部分有颜色显示。整体配置如下vim.opt.rtp:prepend(vim.fn.expand(~/.local/share/nvim/lazy/lazy.nvim))require(lazy).setup({{nvim-lua/plenary.nvim},{nvim-tree/nvim-web-devicons},{sindrets/diffview.nvim, dependencies{nvim-lua/plenary.nvim,nvim-tree/nvim-web-devicons,},},{lewis6991/gitsigns.nvim, configfunction()require(gitsigns).setup()end,},{petertriho/nvim-scrollbar, dependencies{lewis6991/gitsigns.nvim}, configfunction()require(scrollbar).setup()require(scrollbar.handlers.gitsigns).setup()end,},})vim.opt.numbertruevim.opt.relativenumbertruevim.api.nvim_create_autocmd(FileType,{patterndiff, callbackfunction()vim.opt_local.numbertruevim.opt_local.relativenumbertrueend,})5. 一些其他功能在diff中可以按住ctrl w w, 不断的切换页面窗口在diff中zR 展开全部 fold zM 折叠全部这个也可以查看文件树6. git 和 nvim 的完整配置vim.g.mapleader vim.g.maplocalleader vim.opt.rtp:prepend(vim.fn.expand(~/.local/share/nvim/lazy/lazy.nvim))require(lazy).setup({{folke/tokyonight.nvim, lazyfalse, priority1000, configfunction()require(tokyonight).setup({stylestorm,})vim.cmd.colorscheme(tokyonight)end,},{nvim-treesitter/nvim-treesitter, lazyfalse, build:TSUpdate, configfunction()require(nvim-treesitter).setup({ensure_installed{python,lua,vim,bash,json,markdown}, highlight{enabletrue},})end,},{nvim-lua/plenary.nvim},{nvim-tree/nvim-web-devicons},{sindrets/diffview.nvim, dependencies{nvim-lua/plenary.nvim,nvim-tree/nvim-web-devicons,}, configfunction()vim.keymap.set(n,leadergv,cmdDiffviewOpenCR,{descGit diff view})vim.keymap.set(n,leadergc,cmdDiffviewCloseCR,{descClose diff view})vim.keymap.set(n,leadergh,cmdDiffviewFileHistory %CR,{descFile history})vim.keymap.set(n,leadergH,cmdDiffviewFileHistoryCR,{descProject history})end,},{lewis6991/gitsigns.nvim, configfunction()require(gitsigns).setup({on_attachfunction(bufnr)localgspackage.loaded.gitsignslocalmapfunction(mode, lhs, rhs, desc)vim.keymap.set(mode, lhs, rhs,{bufferbufnr, descdesc})end -- 跳转改动块 map(n,]c, function()ifvim.wo.diffthenvim.cmd.normal({]c, bangtrue})elsegs.next_hunk()end end,Next git hunk)map(n,[c, function()ifvim.wo.diffthenvim.cmd.normal({[c, bangtrue})elsegs.prev_hunk()end end,Prev git hunk)-- 查看当前改动 map(n,leaderhd, gs.preview_hunk,Preview hunk)-- stage / reset map(n,leaderhs, gs.stage_hunk,Stage hunk)map(n,leaderhr, gs.reset_hunk,Reset hunk)-- blame map(n,leaderhb, gs.blame_line,Blame line)--diff当前文件 map(n,leadergd, gs.diffthis,Diff current file)-- 和上一个版本比较常用 map(n,leadergD, function()gs.diffthis(~)end,Diff against previous version)end,})end,},{petertriho/nvim-scrollbar, dependencies{lewis6991/gitsigns.nvim}, configfunction()require(scrollbar).setup()require(scrollbar.handlers.gitsigns).setup()end,},{folke/flash.nvim, eventVeryLazy, opts{}, keys{{gs, mode{n,x,o}, function()require(flash).jump()end, descFlash Jump,},},},{nvim-tree/nvim-tree.lua, dependencies{nvim-tree/nvim-web-devicons,}, configfunction()require(nvim-tree).setup()end,},})vim.opt.numbertruevim.opt.relativenumbertruevim.api.nvim_create_autocmd(FileType,{patterndiff, callbackfunction()vim.opt_local.numbertruevim.opt_local.relativenumbertrueend,})vim.opt.clipboardunnamedplus-- 跳转历史像浏览器一样 vim.keymap.set(n,C-h,C-o,{descJump back})vim.keymap.set(n,C-l,C-i,{descJump forward})vim.keymap.set(n,Esc,cmdnohlsearchCR,{descClear search highlight})vim.keymap.set(n,leadere,cmdNvimTreeToggleCR,{descToggle file tree})-- 缩进配置 vim.opt.tabstop4vim.opt.shiftwidth4vim.opt.expandtabtrue常用的语法 空格 g d 当前文件diff空格 h d 当前改动块]c 下一个改动[c 上一个改动 空格 gv项目diff空格 g h 文件历史 空格 h c 回退上一个窗口状态 空格 h r 回退当强hunk三、vim的常用技巧补充1. 在下一行插入按住 ‘o’2. /搜索后取消高亮在你的 init.lua 最后加 vim.keymap.set(n,Esc,cmdnohlsearchCR) 效果 按 Esc → 自动清除搜索高亮3. 时间回溯前进和后退 给你一个真实使用场景最重要 假设你在写代码 场景 1搜索 回跳 1. 在 main 函数 2. /foo → 跳到 foo 函数 3. 再 /bar → 跳到 bar 现在你的位置链是 main → foo → bar 这时候 Ctrlh → 回 foo Ctrlh → 回 main Ctrll → 回 foo Ctrll → 回 bar 就像浏览网页一样在历史里跳 场景 2flash.nvim你现在最 relevant gs → 跳到 A gs → 跳到 B gs → 跳到 C 然后 Ctrlh → 回 B Ctrlh → 回 A Ctrll → 回 B Ctrll → 回 C 这就是 “瞬移 可回溯” 场景 3代码阅读最爽的用法 gd → 跳到函数定义 然后你看完了 Ctrlh → 回原位置 这就是 IDE 里的 Go to definition → Back如何配置, 之后就可以ctrl l 和 ctrl h进行前进后退vim.keymap.set(n,C-h,C-o)-- 后退 vim.keymap.set(n,C-l,C-i)-- 前进4. vim的复制到粘贴板你的 init.lua 末尾加 vim.opt.clipboard unnamedplus5. 闪现安装下面的插件改这个/home/yzh/.config/nvim/init.lua。之后就可以gs 之后按住你想闪现的字母如果有多个再按住一个字母就可以跳转了。{folke/flash.nvim, eventVeryLazy, opts{}, keys{{gs, mode{n,x,o}, function()require(flash).jump()end, descFlash Jump,},},},一个完整的配置vim.opt.rtp:prepend(vim.fn.expand(~/.local/share/nvim/lazy/lazy.nvim))require(lazy).setup({{nvim-lua/plenary.nvim},{nvim-tree/nvim-web-devicons},{sindrets/diffview.nvim, dependencies{nvim-lua/plenary.nvim,nvim-tree/nvim-web-devicons,},},{lewis6991/gitsigns.nvim, configfunction()require(gitsigns).setup()end,},{petertriho/nvim-scrollbar, dependencies{lewis6991/gitsigns.nvim}, configfunction()require(scrollbar).setup()require(scrollbar.handlers.gitsigns).setup()end,},{folke/flash.nvim, eventVeryLazy, opts{}, keys{{gs, mode{n,x,o}, function()require(flash).jump()end, descFlash Jump,},},},})vim.opt.numbertruevim.opt.relativenumbertruevim.api.nvim_create_autocmd(FileType,{patterndiff, callbackfunction()vim.opt_local.numbertruevim.opt_local.relativenumbertrueend,})vim.opt.clipboardunnamedplus-- 跳转历史像浏览器一样 vim.keymap.set(n,C-h,C-o)-- 后退 vim.keymap.set(n,C-l,C-i)-- 前进 vim.keymap.set(n,Esc,cmdnohlsearchCR)6. 在nvim中打开终端:term之后按住** i ** 开始在终端里面运行指令。之后退出终端需要按ctrl \ ctrl n
vim学习进阶
发布时间:2026/6/3 9:33:30
一、与浏览器配合使用1. 下载Vimium插件2. 基本使用1滚动这个就hjkl上下左右滚动gg顶部G底部和vim一样(2) 标签页相关x 关闭标签 t 新建标签 J / K 切换标签(3) 前进后退对于某个浏览页都有历史页面啥的这个就是回溯H → 后退Back L → 前进Forward4搜索和点击搜索就是/之后Nn往上下查找点击就是f之后按住对应的字母就点击到对应位置。总结而言其实不能完全脱离鼠标因为有些需要选中的其实做不到可能后面还会进化把3 设置初始页面默认谷歌的初始页面是chrome://newtab插件无法使用我们把他改成https://www.google.com。1 下载插件New Tab Redirect4. 常用快捷键ctrl l 把输入重定向到网址栏 ctrl w 关闭当前窗口 ctrl t 新开一个窗口 进入Vimium模式下 按住 b 就可以在搜索收藏夹里面的内容非常方便。二、VIM如何像vscode一样查看git diff因为我们用ai写代码每给我改一次我就commit一次之后使用vscode可以方便的看出来ai给我改了什么。但是我也想用使用vim达到这个效果。1. 安装新版本nvimcd~wgethttps://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gztarxzvf nvim-linux-x86_64.tar.gz2. 如果你有好几个nvim那么配置这个刚下再的为默认把下面这行加到你的 ~/.bashrc 末尾exportPATH$HOME/nvim-linux-x86_64/bin:$PATH然后执行source~/.bashrc 再检查whichnvim nvim--version理想结果 /home/yzh/nvim-linux-x86_64/bin/nvim NVIM v0.11.63. 安装lazy.nvim确认 nvim--version已经是0.8 之后再执行gitclone https://github.com/folke/lazy.nvim\~/.local/share/nvim/lazy/lazy.nvim接着把 ~/.config/nvim/init.lua 改成最小可用版vim.opt.rtp:prepend(vim.fn.expand(~/.local/share/nvim/lazy/lazy.nvim))require(lazy).setup({{nvim-lua/plenary.nvim,},{sindrets/diffview.nvim, dependencies{nvim-lua/plenary.nvim},},})最后安装插件 启动 nvim 后执行 :Lazysync如果正常再执行 :DiffviewOpen 前提是你当前目录在一个 Git 仓库里并且文件有改动。4. 一些常用配置如显示行号如最左侧显示文件类型图标如有面代码改动部分有颜色显示。整体配置如下vim.opt.rtp:prepend(vim.fn.expand(~/.local/share/nvim/lazy/lazy.nvim))require(lazy).setup({{nvim-lua/plenary.nvim},{nvim-tree/nvim-web-devicons},{sindrets/diffview.nvim, dependencies{nvim-lua/plenary.nvim,nvim-tree/nvim-web-devicons,},},{lewis6991/gitsigns.nvim, configfunction()require(gitsigns).setup()end,},{petertriho/nvim-scrollbar, dependencies{lewis6991/gitsigns.nvim}, configfunction()require(scrollbar).setup()require(scrollbar.handlers.gitsigns).setup()end,},})vim.opt.numbertruevim.opt.relativenumbertruevim.api.nvim_create_autocmd(FileType,{patterndiff, callbackfunction()vim.opt_local.numbertruevim.opt_local.relativenumbertrueend,})5. 一些其他功能在diff中可以按住ctrl w w, 不断的切换页面窗口在diff中zR 展开全部 fold zM 折叠全部这个也可以查看文件树6. git 和 nvim 的完整配置vim.g.mapleader vim.g.maplocalleader vim.opt.rtp:prepend(vim.fn.expand(~/.local/share/nvim/lazy/lazy.nvim))require(lazy).setup({{folke/tokyonight.nvim, lazyfalse, priority1000, configfunction()require(tokyonight).setup({stylestorm,})vim.cmd.colorscheme(tokyonight)end,},{nvim-treesitter/nvim-treesitter, lazyfalse, build:TSUpdate, configfunction()require(nvim-treesitter).setup({ensure_installed{python,lua,vim,bash,json,markdown}, highlight{enabletrue},})end,},{nvim-lua/plenary.nvim},{nvim-tree/nvim-web-devicons},{sindrets/diffview.nvim, dependencies{nvim-lua/plenary.nvim,nvim-tree/nvim-web-devicons,}, configfunction()vim.keymap.set(n,leadergv,cmdDiffviewOpenCR,{descGit diff view})vim.keymap.set(n,leadergc,cmdDiffviewCloseCR,{descClose diff view})vim.keymap.set(n,leadergh,cmdDiffviewFileHistory %CR,{descFile history})vim.keymap.set(n,leadergH,cmdDiffviewFileHistoryCR,{descProject history})end,},{lewis6991/gitsigns.nvim, configfunction()require(gitsigns).setup({on_attachfunction(bufnr)localgspackage.loaded.gitsignslocalmapfunction(mode, lhs, rhs, desc)vim.keymap.set(mode, lhs, rhs,{bufferbufnr, descdesc})end -- 跳转改动块 map(n,]c, function()ifvim.wo.diffthenvim.cmd.normal({]c, bangtrue})elsegs.next_hunk()end end,Next git hunk)map(n,[c, function()ifvim.wo.diffthenvim.cmd.normal({[c, bangtrue})elsegs.prev_hunk()end end,Prev git hunk)-- 查看当前改动 map(n,leaderhd, gs.preview_hunk,Preview hunk)-- stage / reset map(n,leaderhs, gs.stage_hunk,Stage hunk)map(n,leaderhr, gs.reset_hunk,Reset hunk)-- blame map(n,leaderhb, gs.blame_line,Blame line)--diff当前文件 map(n,leadergd, gs.diffthis,Diff current file)-- 和上一个版本比较常用 map(n,leadergD, function()gs.diffthis(~)end,Diff against previous version)end,})end,},{petertriho/nvim-scrollbar, dependencies{lewis6991/gitsigns.nvim}, configfunction()require(scrollbar).setup()require(scrollbar.handlers.gitsigns).setup()end,},{folke/flash.nvim, eventVeryLazy, opts{}, keys{{gs, mode{n,x,o}, function()require(flash).jump()end, descFlash Jump,},},},{nvim-tree/nvim-tree.lua, dependencies{nvim-tree/nvim-web-devicons,}, configfunction()require(nvim-tree).setup()end,},})vim.opt.numbertruevim.opt.relativenumbertruevim.api.nvim_create_autocmd(FileType,{patterndiff, callbackfunction()vim.opt_local.numbertruevim.opt_local.relativenumbertrueend,})vim.opt.clipboardunnamedplus-- 跳转历史像浏览器一样 vim.keymap.set(n,C-h,C-o,{descJump back})vim.keymap.set(n,C-l,C-i,{descJump forward})vim.keymap.set(n,Esc,cmdnohlsearchCR,{descClear search highlight})vim.keymap.set(n,leadere,cmdNvimTreeToggleCR,{descToggle file tree})-- 缩进配置 vim.opt.tabstop4vim.opt.shiftwidth4vim.opt.expandtabtrue常用的语法 空格 g d 当前文件diff空格 h d 当前改动块]c 下一个改动[c 上一个改动 空格 gv项目diff空格 g h 文件历史 空格 h c 回退上一个窗口状态 空格 h r 回退当强hunk三、vim的常用技巧补充1. 在下一行插入按住 ‘o’2. /搜索后取消高亮在你的 init.lua 最后加 vim.keymap.set(n,Esc,cmdnohlsearchCR) 效果 按 Esc → 自动清除搜索高亮3. 时间回溯前进和后退 给你一个真实使用场景最重要 假设你在写代码 场景 1搜索 回跳 1. 在 main 函数 2. /foo → 跳到 foo 函数 3. 再 /bar → 跳到 bar 现在你的位置链是 main → foo → bar 这时候 Ctrlh → 回 foo Ctrlh → 回 main Ctrll → 回 foo Ctrll → 回 bar 就像浏览网页一样在历史里跳 场景 2flash.nvim你现在最 relevant gs → 跳到 A gs → 跳到 B gs → 跳到 C 然后 Ctrlh → 回 B Ctrlh → 回 A Ctrll → 回 B Ctrll → 回 C 这就是 “瞬移 可回溯” 场景 3代码阅读最爽的用法 gd → 跳到函数定义 然后你看完了 Ctrlh → 回原位置 这就是 IDE 里的 Go to definition → Back如何配置, 之后就可以ctrl l 和 ctrl h进行前进后退vim.keymap.set(n,C-h,C-o)-- 后退 vim.keymap.set(n,C-l,C-i)-- 前进4. vim的复制到粘贴板你的 init.lua 末尾加 vim.opt.clipboard unnamedplus5. 闪现安装下面的插件改这个/home/yzh/.config/nvim/init.lua。之后就可以gs 之后按住你想闪现的字母如果有多个再按住一个字母就可以跳转了。{folke/flash.nvim, eventVeryLazy, opts{}, keys{{gs, mode{n,x,o}, function()require(flash).jump()end, descFlash Jump,},},},一个完整的配置vim.opt.rtp:prepend(vim.fn.expand(~/.local/share/nvim/lazy/lazy.nvim))require(lazy).setup({{nvim-lua/plenary.nvim},{nvim-tree/nvim-web-devicons},{sindrets/diffview.nvim, dependencies{nvim-lua/plenary.nvim,nvim-tree/nvim-web-devicons,},},{lewis6991/gitsigns.nvim, configfunction()require(gitsigns).setup()end,},{petertriho/nvim-scrollbar, dependencies{lewis6991/gitsigns.nvim}, configfunction()require(scrollbar).setup()require(scrollbar.handlers.gitsigns).setup()end,},{folke/flash.nvim, eventVeryLazy, opts{}, keys{{gs, mode{n,x,o}, function()require(flash).jump()end, descFlash Jump,},},},})vim.opt.numbertruevim.opt.relativenumbertruevim.api.nvim_create_autocmd(FileType,{patterndiff, callbackfunction()vim.opt_local.numbertruevim.opt_local.relativenumbertrueend,})vim.opt.clipboardunnamedplus-- 跳转历史像浏览器一样 vim.keymap.set(n,C-h,C-o)-- 后退 vim.keymap.set(n,C-l,C-i)-- 前进 vim.keymap.set(n,Esc,cmdnohlsearchCR)6. 在nvim中打开终端:term之后按住** i ** 开始在终端里面运行指令。之后退出终端需要按ctrl \ ctrl n