This is a FORK of https://github.com/amiorin/vim-project
Changes:
- New commands
LockProjectDirectoryandUnlockProjectDirectoryto lock and unlock, respectively, the current working directory - New command
GoProjectto select a project from thecmdline mode - New options
project_enable_tab_title_guiandproject_enable_win_title - Add support for tabline; new option
project_enable_tab_title_term - New command
CallbackAllProjectsto add a callback to all defined projects. - New commands
TabWelcomeandTabProject - New entity type 'section'; new commands
SectionandCallbackAllSections - Add support for wildcards in project paths
- Pass additional argument to callbacks indicating whether this is a 'leaf' project (has no further subprojects)
- In Welcome buffer, break long lines with indent
Changes are licensed under the same terms as the original
New Commands:
-
CallbackAllProjectsIt's used inside the.vimrc. The first parameter is the name of a function or an array of function names. This callback is added to all projects that have been defined so far. -
CallbackAllSectionsIt's used inside the.vimrc. The first parameter is the name of a function or an array of function names. This callback is added to all sections that have been defined so far. -
GoProjectIt's used inside thecmdline modeto switch to one of the defined projects. The required parameter is thetitleof the project without quotation. Completion is supported. -
LockProjectDirectoryLock the project's current working directory so opening a file from the project doesn't reset the window's current working directory to the project directory. -
SectionIt's used inside the.vimrc. Similar toProject, except that lcd is executed only when the section is selected from the Welcome menu or with GoProject or TabProject. The lcd is not changed when opening a file in the section. -
TabProjectis likeGoProject, but opens the project in a new tab. -
TabWelcomeis likeWelcome, but opens in a new tab. -
UnlockProjectDirectoryUndo the effects ofLockProjectDirectory
New Options:
-
project_enable_tab_title_gui: show project name in tab title (values: 0, 1; default: 1). When set to 1, the project to which the file belongs is shown in the tab's title in GUI vim.g:project_enable_tab_title_gui=0
-
project_enable_tab_title_term: show project name in tab title (values: 0, 1; default: 0). When set to 1, the project to which the file belongs is shown in the tab's title in terminal vim.g:project_enable_tab_title_term=1
-
project_enable_win_title: show current working directory in window title (values: 0, 1; default: 1). When set to 1, the current working directory is shown in the window's title bar in GUI vim.g:project_enable_win_title=0
- New feature
project#utils#alternate. To alternate betweenfile.extandfile_suffix.extorfileSuffix.extwith the command:A - Windows support added
A Project is made of :
- One directory (the
root of the project) - One title (by default the last part of the the
root of the project) - One or more
callbacks
Everytime you open a file nested in the root of the project
- the
local current directoryis changed to theroot of the project - the
guitablabelis set to thetitleof the project - the
callbacksof the project are executed
There are four commands :
ProjectIt's used inside the.vimrc. The first parameter is thepathto the project. The second parameter is optional and it is thetitleof the project and the default value of it is the last part of the name of the directory containing the project. If thepathto the project is a relative path, it's combined with thestarting path. Thestarting pathis defined when you initialize the plugin :
set rtp+=~/.vim/bundle/vim-project/
" custom starting path
call project#rc("~/Code")
" default starting path (the home directory)
call project#rc()ProjectPathIt's used inside thecmdline mode. The first parameter is thepathwithout quotation. The second parameter is optional and it is thetitleof the project without quotation. If thepathto the project is a relative path, it's combined withcurrent working directoryand not with thestarting path.FileIt's used inside the.vimrc. The first parameter is thepathto the file. The second parameter is thetitleof the file. This command doesn't change thelocal current directory.CallbackIt's used inside the.vimrc. The first parameter is thetitleof a project already defined withProjectorFile. The second parameter is the name a function or an array of function names. This function or these functions are callbacks and they are executed everytime a file nested in theroot of the projectis opened with one parameter that is thetitleof the project.WelcomeIt's theStartifyequivalent. If you don't wantWelcometo appear when you start vim:
" before call project#rc()
let g:project_enable_welcome = 0
" if you want the NERDTree integration.
let g:project_use_nerdtree = 1
set rtp+=~/.vim/bundle/vim-project/
call project#rc("~/Code")The command Callback accepts a string (the name of the function). The
function project#config#callback accepts string or dictionary. If it's a
dictionary, the method invoke(title) is called on the dictionary.
" For more information on dictionary and prototype programming in vim :
:h selfThe function project#utils#alternate can be used together with
project#config#callback. It returns a dictionary. This dictionary
has the method invoke(title) that creates <buffer> commands to
switch to the alternate files like the plugin vim-rake.
" :A :AE :AS :AV :AT :AD :AR . They all accept the bang (!)
" Remembet that the title of the project is only the last dir of the path
Project 'nugg.ad/nuggad-compiler'
" project#utils#alternate returns a dictionary with a method ``invoke(title)``.
"
" everytime we open a file inside the project if the path starts with
" ``spec`` or ``src`` the commands :A are defined.
"
" +_spec means add _spec to the file
" -_spec means remove _spec to the file
call project#config#callback("nuggad-compiler", project#utils#alternate(
\ [{'regex': '^src', 'string': 'spec', 'suffix': '+_spec'},
\ {'regex': '^spec', 'string': 'src', 'suffix': '-_spec'}]
\ ))If you use Vundle you can install this plugin using Vim command :BundleInstall amiorin/vim-project.
Don't forget put a line Bundle 'amiorin/vim-project' in your .vimrc.
If you use Pathogen, you just execute following:
cd ~/.vim/bundle
git clone https://github.com/amiorin/vim-project.gitIf you don't use either plugin management system, copy the plugin directory to your .vim directory.
*nix: $HOME/.vim Windows: $HOME/vimfiles
sample .vimrc:
let g:project_use_nerdtree = 1
set rtp+=~/.vim/bundle/vim-project/
call project#rc("~/Code")
Project 'scratch'
Project 'dotfiles'
File 'dotfiles/vimrc' , 'vimrc'
File 'dotfiles/gvimrc' , 'gvimrc'
File 'dotfiles/zshrc' , 'zshrc'
Project 'gollum'
File 'gollum/Todo.md' , 'todo'
Callback 'gollum' , 'RemoveTextWidth'
function! RemoveTextWidth(...) abort
setlocal textwidth=0
endfunction
Project 'octopress'
Project 'gsource'
Project 'markup'
Project 'glib'
Project 'reloadlive'
Project 'flashcards'
Project 'leitner'
Callback 'leitner' , ['AddSpecToPath', 'RemoveTextWidth']
function! AddSpecToPath(tile) abort
setlocal path+=spec
endfunction
Project '~/.vim/bundle/vim-fenced-code-blocks' , 'fenced'
Project '~/.vim/bundle/vim-project' , 'project'
Project '~/.vim/bundle/vim-bookmarks' , 'bookmarks'
Project '~/.vim/bundle/ctrlp.vim' , 'ctrlp'
Project '~/.vim/bundle/ctrlp-z' , 'ctrlp-z'
Project '~/.vim/bundle/vim-eval' , 'eval'From the cmdline mode.
ProjectPath uses the cwd and the arguments are not quoted.
:ProjectPath .
:ProjectPath /etc myconfigLike this plugin?


