因此,当我想使用 :e 命令创建新文件时,我不想指定整个路径,而只想指定新文件名。可以做吗?
正如已经建议的,您可以使用autochdir,它将更改为您打开的文件的目录,另一个选项是
:cd mydirectory
这将更改目录。这可以是绝对路径或相对路径,因此
:cd ..
将向上移动一级。或者您可以使用 :cd %:h
,它也会更改为当前文件所在的目录,但不设置 autochdir。
:cd
会将目录更改为您的主目录(或在 Windows 上,打印当前目录)。
:cd -
会将目录更改为您之前访问过的目录。
此外,如果您使用 netrw 文件资源管理器浏览文件系统,您可以通过按 c 键设置当前目录。
编辑:对于较新版本,如果
cd
不起作用,请尝试 c
。
尝试将
set autochdir
添加到您的 .vimrc
。如果您只想更改一次,请使用 :cd
(或 :cd!
强制更改)。
用
netrw:
除了按c键设置当前目录外,还可以输入:
let g:netrw_keepdir= 0
在你的
.vimrc
;这意味着 netrw
将保持浏览目录与当前目录相同。
我不知道vim出了什么问题。我想要启动 vim 的目录作为当前目录。
我已按照上面有关 autochd 的提示进行操作,并将其设置为我的 .vimrc 中的 noautcd。
我还没做到,但从现在开始我就要像这样启动vim了:
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.
您可以安装 Rooter Vim 插件,当您打开文件或目录时,它会自动将工作目录更改为自动检测到的项目根目录。 Rooter 为您设置工作目录后,如果您尝试编辑像
:e example.txt
这样的文件,Vim 将在项目根目录中编辑 example.txt
。
如果您使用的是 vim-plug 插件管理器,您可以通过将以下内容添加到
.vimrc
来安装 Rooter,然后重新加载 Vim 并运行 :PlugInstall
。
Plug 'airblade/vim-rooter'
这是我使用 Nvim NvChad 时遇到的问题的解决方案。
我确实尝试过使用
set autochdir
,但仍然不起作用。
所以我做的下一步就是设置自定义映射。
custom/chadrc.lua
这行代码M.mappings = require "custom.mappings"
mappings.lua
中创建新文件
custom
mappings.lua
local M = {}
M.abc = {
n = {
["<leader>cf"] = {"<cmd>cd %:h <CR>", "Set Files Location As Dir"}
}
}
return M
<leader>cf
希望这有帮助!
对于那些想了解
%:h
的人,相关的 Vim 帮助主题是:
:help filename-modifiers
一旦向下滚动,就会出现几个演示各种修饰符的示例。
%
和 #
位于页面上方一点。它们涵盖在:
:help cmdline-special