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

问题描述 投票:0回答:9

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

text-editor vim
9个回答
213
投票

正如已经建议的,您可以使用autochdir,它将更改为您打开的文件的目录,另一个选项是

:cd mydirectory

这将更改目录。这可以是绝对路径或相对路径,因此

:cd ..
将向上移动一级。或者您可以使用
:cd %:h
,它也会更改为当前文件所在的目录,但不设置 autochdir。

:cd

会将目录更改为您的主目录(或在 Windows 上,打印当前目录)。

:cd -

会将目录更改为您之前访问过的目录。


21
投票

此外,如果您使用 netrw 文件资源管理器浏览文件系统,您可以通过按 c 键设置当前目录。

编辑:对于较新版本,如果

cd
不起作用,请尝试
c


15
投票

尝试将

set autochdir
添加到您的
.vimrc
。如果您只想更改一次,请使用
:cd
(或
:cd!
强制更改)。


5
投票

netrw:
除了按c键设置当前目录外,还可以输入:

let g:netrw_keepdir= 0

在你的

.vimrc
;这意味着
netrw
将保持浏览目录与当前目录相同。


4
投票

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

我已按照上面有关 autochd 的提示进行操作,并将其设置为我的 .vimrc 中的 noautcd。

我还没做到,但从现在开始我就要像这样启动vim了:

vim —cmd 'cd `pwd`'

这将使它坚持到当前目录!


3
投票

将其添加到我的

.vimrc
会自动将 Vim 的工作目录更改为当前文件:

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

1
投票

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

" 自动切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.

您可以安装 Rooter Vim 插件,当您打开文件或目录时,它会自动将工作目录更改为自动检测到的项目根目录。 Rooter 为您设置工作目录后,如果您尝试编辑像

:e example.txt
这样的文件,Vim 将在项目根目录中编辑
example.txt

如果您使用的是 vim-plug 插件管理器,您可以通过将以下内容添加到

.vimrc
来安装 Rooter,然后重新加载 Vim 并运行
:PlugInstall

Plug 'airblade/vim-rooter'

1
投票

这是我使用 Nvim NvChad 时遇到的问题的解决方案。

我确实尝试过使用

set autochdir
,但仍然不起作用。

所以我做的下一步就是设置自定义映射。

  1. 添加
    custom/chadrc.lua
    这行代码
    M.mappings = require "custom.mappings"
  2. 在文件夹
    mappings.lua
    中创建新文件
    custom
  3. 将此行代码添加到
    mappings.lua
local M = {}
M.abc = {
    n = {
        ["<leader>cf"] = {"<cmd>cd %:h <CR>", "Set Files Location As Dir"} 
    }
}
return M
  1. 打开 nvim 并将目录更改为当前文件位置,请按
    <leader>cf

希望这有帮助!


0
投票

对于那些想了解

%:h
的人,相关的 Vim 帮助主题是:

:help filename-modifiers

一旦向下滚动,就会出现几个演示各种修饰符的示例。


%
#
位于页面上方一点。它们涵盖在:

:help cmdline-special


© www.soinside.com 2019 - 2024. All rights reserved.