如何在 Vim 中设置工作/工作目录?

因此,当我想使用: e 命令创建一个新文件时,我不想指定整个路径,只是指定新文件名。能做到吗?

83447 次浏览

尝试将 set autochdir添加到 .vimrc。如果您想改变它只是这一次,使用 :cd(或 :cd!强制它)。

如前所述,您可以使用 autochdir,它将更改为您打开的文件的目录,另一个选项是

:cd mydirectory

这将改变目录。这可以是一个绝对路径或相对路径,因此 :cd ..将向上移动一个级别。或者您可以使用 :cd %:h,它也会更改到当前文件所在的目录,但是不设置 autochdir。

:cd

将目录切换到您的主目录(或在 windows 上,打印工作目录)。

:cd -

将把目录更改为您访问的上一个目录。

此外,如果你使用新的文件浏览器浏览文件系统,你可以通过按 c 键来设置工作目录。

编辑: 对于较新的版本,如果 c不工作,请尝试 cd

使用 netrw:除了按下 c键设定工作目录外,你还可以输入:

let g:netrw_keepdir= 0

这意味着 netrw将保持浏览目录与工作目录相同。

我不知道 vim 出了什么问题,我需要启动 vim 的目录作为当前目录。

我遵循了上面关于 autochd 的提示,并在.vimrc 中将其设置为 noautcd。

我还没有做到这一点,但我要开始像这样的活力从现在开始:

vim —cmd 'cd `pwd`'

那会让它粘在工作目录上!

将这个文件添加到我的 .vimrc中会自动将 Vim 的工作目录更改为当前文件:

autocmd BufEnter * silent! :lcd%:p:h

更新: 现在我只是使用这些代码,而不是安装插件

" 自动切nvim到当前文件所在路径, 避免leaderF每个命令前都要敲一下 :pwd.
" 代替autochdir:  Switch to the directory of the current file unless it breaks something.
au AG BufEnter * call AutoDiR()
func! AutoDiR()
" Don't mess with vim on startup.
let should_cd = (!exists("v:vim_did_enter") || v:vim_did_enter)
" 或
" v:vim_did_enter :
"     0 during startup
"     1 just before VimEnter.
"  forbid for some filetypes
" let should_cd = should_cd && david#init#find_ft_match(['help', 'dirvish', 'qf']) < 0
" Only change to real files:
let should_cd = should_cd && filereadable(expand("%"))
" filereadable()
" The result is a Number, which is |TRUE| when a file with the
" name {file} exists, and can be read.
if should_cd
silent! cd %:p:h
endif
endf


" cdh:   cd here
nno cd :cd %:p:h<cr><cmd>pwd<cr><cmd>let g:Lf_WorkingDirectory=getcwd()<cr><cmd>echo "Lf目录:"..g:Lf_WorkingDirectory<cr>
" nno cdh
cnorea <expr> cdh ( getcmdtype() == ":" && getcmdline() == 'cdh') ?
\ 'cd %:p:h<cr>  :pwd<cr>'
\ :  'cdh'




" 方法2: 不好使? 要敲一次pwd触发?
" au AG VimEnter * set autochdir | pwd | echom '设置了autochdir'
" Note: When this option is on,  some plugins may not work.
" 貌似不行:
" Plug 'https://github.com/airblade/vim-rooter'




" 对于vscode-nvim
" vscode用wsl的nvim作为bin时,pwd永远是Microsoft VS Code.  等邮件通知更新吧. 其实不影响使用?
" 我的笔记: https://github.com/vscode-neovim/vscode-neovim/issues/520#issuecomment-1013853745
"
"  这个也不行:
" au AG BufEnter * silent! lcd %:p:h
" lcd: local window cd ?
"      Like |:cd|, but only set the current directory for the  current window.

你可以安装 鲁特 Vim 插件,当你打开一个文件或目录时,它会自动将工作目录更改为自动检测到的项目根目录。在 Rooter 为您设置了工作目录之后,如果您尝试编辑像 :e example.txt这样的文件,Vim 将在项目 root 中编辑 example.txt

如果您使用的是 Vim-plug插件管理器,您可以通过将以下内容添加到您的 .vimrc来安装 Rooter,然后重新加载 Vim 并运行 :PlugInstall

Plug 'airblade/vim-rooter'