gpt4 book ai didi

vim - 在 Vim 中切换项目的最佳方式是什么?

转载 作者:行者123 更新时间:2023-12-04 17:47:36 25 4
gpt4 key购买 nike

我使用 CtrlP 来处理项目中的文件(通常可以定义为 git repo root),但我经常发现自己使用 :cd在不同的项目之间切换,这似乎不必要地耗时。

我希望 vim 能够记住我访问过的不同 git repo 根并在它们之间快速跳转。到达那里后,repo 中的所有文件都将可供 CtrlP 使用,我可以到达我想要的地方。

有什么方法可以使用现有插件获得我想要的东西吗?

最佳答案

如果您使用 fugitive.vim那么我可能会给你一个选择。

将以下内容放入您的 ~/.vimrc文件:

set viminfo+=!

if !exists('g:PROJECTS')
let g:PROJECTS = {}
endif

augroup project_discovery
autocmd!
autocmd User Fugitive let g:PROJECTS[fnamemodify(fugitive#repo().dir(), ':h')] = 1
augroup END

command! -complete=customlist,s:project_complete -nargs=1 Project cd <args>

function! s:project_complete(lead, cmdline, _) abort
let results = keys(get(g:, 'PROJECTS', {}))

" use projectionist if available
if exists('*projectionist#completion_filter')
return projectionist#completion_filter(results, a:lead, '/')
endif

" fallback to cheap fuzzy matching
let regex = substitute(a:lead, '.', '[&].*', 'g')
return filter(results, 'v:val =~ regex')
endfunction

概述

这个想法是,无论何时 Fugitive 激活缓冲区,脚本都会将项目目录路径存储在 g:PROJECTS 中。字典。添加 !'viminfo'将大写的全局变量存储到 viminfo 文件中,从而使发现的项目持久化。一旦 Fugitive 发现一个项目 :Project命令可用于 :cd到那个目录完成。

注意事项和警告
  • 我没有测试过任何这些代码。按原样使用。
  • 需要 Fugitive.vim
  • 可选地使用 Projectionist.vim完成(如果可用)
  • 随意将目录路径添加到 g:PROJECTS通过其他方式
  • 必须访问存储库才能被发现
  • 没有清理丢失的项目目录
  • Vim 没有“项目”的概念,所以能做的只有这么多
  • 关于vim - 在 Vim 中切换项目的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28287402/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com