sponsor Vim development Vim logo Vim Book Ad

AutoCWD.vim : Automatically updates vim's CWD depending on the current file path

 script karma  Rating 0/0, Downloaded by 1804  Comments, bugs, improvements  Vim wiki

created by
Yoonsang Lee
script type
More information : https://github.com/yssl/autocwd.vim

# autocwd.vim

autocwd.vim automatically changes the current working directory (CWD) of vim
when you change the current buffer (or window).
You can define patterns that may be included in a file path or buffer name,
and corresponding working directories in your .vimrc.


## Usage

You can define patterns and working directories in your .vimrc as follows:

let g:autocwd_patternwd_pairs = [
\[pattern1, working_directory1],
\[pattern2, working_directory2],

- pattern is a substring of a file path or buffer name with Unix shell-style wildcards.  
For example, '\*.vim' matches files with .vim extension and '*/project1/*' matches files
that contains '/project1/' in their absolute file paths.  
(Please refer https://docs.python.org/2/library/fnmatch.html for more information.
patterns are processed by python's fnmatch function internally.)

- working_directory will be the CWD when the corresponding pattern matches the c
urrent file path or buffer name.  
It can be one of following types:

type                                 | example: working_directory | example: CWD to be changed
---                                  | ---                        | ---
absolute path                        | '~/test'                   | ~/test
vim's file name modifier (1)         | '%:p:h'                    | current file's directory
special keyword                      | '*REPO*' (2)               | root directory of the repository containing current file

(1) Please refer http://vimdoc.sourceforge.net/htmldoc/cmdline.html#filename-modifiers for more information.  
(2) '*REPO*' is replaced with the root directory of the repository containing current file.  
- Examples:  
If the directory structure looks like this:
+-- ~/code
| +-- bin
| +-- examples
| | +-- .git
| | +-- ex1
| | | +-- current file
- '\*REPO\*' : ~/code/examples
- '\*REPO\*/ex1' : ~/code/examples/ex1
- '\*REPO\*/..' : ~/code

- If the current buffer matches one of the defined patterns, the CWD will
be changed to the corresponding working directory.
Otherwise, the default working directory that have been the CWD before
applying `g:autocwd_patternwd_pairs` will be restored.  
You can change the default working directory by `:cd` or other CWD-changing
commands (e.g., 'cd' of the NERDTree) when the current buffer does not
match any of predefined patterns.

- The order of patterns in `g:autocwd_patternwd_pairs` is meaningful.
If the current buffer matches both first and second patterns, the working
directory corresponding to the first pattern will be the CWD.

## Commands

Print the buffer name or file path, matched pattern, and working directory of windows in the current tab.
You can jump to one of the listed windows by typing the index(#) of the window.

There is no activation commands for autocwd.vim.
If you install this plugin, it will starts to manage the CWD.

## Motivation

It is quite useful to set the CWD for each opened file in vim.
Vim provides `:lcd` command for this purpose.
However, it cannot deal with opening other files in the same window because `:lcd` is applied to a specific window, not buffer.  

autocwd.vim is designed to solve this problem.
Moreover, it provides more convenient way to set CWDs with Unix shell-style patterns.
install details
- Using plugin managers (recommended)
    - [Vundle] : Add `Bundle 'yssl/autocwd.vim'` to .vimrc & `:BundleInstall`
    - [NeoBundle] : Add `NeoBundle 'yssl/autocwd.vim'` to .vimrc & `:NeoBundleInstall`
    - [vim-plug] : Add `Plug 'yssl/autocwd.vim'` to .vimrc & `:PlugInstall`
- Using [Pathogen]
    - `cd ~/.vim/bundle; git clone https://github.com/yssl/autocwd.vim.git`
- Manual install (not recommended)
    - Download this plugin and extract it in `~/.vim/`

This plugin requires a version of vim with python support. You can check your vim with :echo has('python'). If your vim doesn't support python, one of the easiest solutions would be installing a more featured version of vim by:
sudo apt-get install vim-nox

rate this script Life Changing Helpful Unfulfilling 
script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
AutoCWD.vim.zip 1.3.2 2019-03-24 7.0 Yoonsang Lee Support both Python 2 & Python 3
autocwd.vim.zip 1.3.1 2015-01-20 7.0 Yoonsang Lee Print working directory in absolute path
autocwd.vim.zip 1.3.0 2014-12-27 7.0 Yoonsang Lee add window selecting prompt to AutoCMDPrint command
autocwd.vim.zip 1.2.0 2014-10-08 7.0 Yoonsang Lee     - add special keyword '*REPO*' that can be used in predefined working_directory.
    now you can set working directory to relative path from the repository directory.
autocwd.zip 1.1.0 2014-08-07 7.0 Yoonsang Lee change the name to autocmd.vim
CWDPattern.zip 1.0.0 2014-06-24 7.0 Yoonsang Lee Initial upload
ip used for rating:

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.