在作为参数给出的目录中打开 neovim/nerdtree

问题描述

我正在将 Neovim 与 nerdtree 一起使用。当以目录为参数打开 nvim 时,我想将其用作 neovim 和 nerdtree 的根目录。开箱即用,nerdtree 在该目录中打开,但是一旦我打开一个文件,nerdtree 的根目录就会变回 shell 的当前目录。我希望 nerdtree 将该目录保留为根目录。

我目前在我的 .bashrc 中使用以下解决方法

nvim_cd()
{
    if [ -d "${1}" ]; then
        local dir="${1}"
        shift 1
        ( cd "${dir}" && nvim "." "${@}" )
    else
        \nvim "${@}"
    fi
}
alias nvim=nvim_cd
alias vim=nvim

这很好用,但我想知道:有没有办法在 init.vim 中实现这一点?

请注意,在特定情况下,我只想在启动期间更改根目录 nvim 以目录作为参数调用,因此 { {1}} 不是我要找的。​​em>

解决方法

您可以通过 .bash_profile 或 .bahrc 中的这一行将您的 Neovim 设为默认编辑器。

export EDITOR='nvim'

然后你可以使用这个脚本来指定一个目录并通过 xargs 命令将其通过管道传输到 neovim。您可以将此行作为别名或函数。

$HOME/your/path/to/dir/  | xargs -r -I % $EDITOR %;

您可能需要考虑使用我的功能来搜索文件或目录,然后在 neovim 中打开它们。挺好用的..

function ds() {
   find $HOME -type d -name "*" ! -path "*/.git*" ! -path # You can exclude directories by specifiying their names.
   "*/__pycache__*" ! -path "*/venv*"  2>/dev/null | fzf | xargs -r -I % $EDITOR %;
}

此函数搜索您的目录并将所选目录作为参数通过管道传输到 neovim。上述函数搜索您的主目录。您可能想考虑它可能会弹出一些不需要的目录,例如库或 .locals 文件夹。 所以使用这个功能只搜索你的密码。

function ds() {
   find . -type d -name "*" ! -path "*/.git*" ! -path # You can exclude directories by specifiying their names.
   "*/__pycache__*" ! -path "*/venv*"  2>/dev/null | fzf | xargs -r -I % $EDITOR %;
}

如何设置NERDTree切换到当前工作目录?

autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif

这将自动切换您的 NERDTree 并匹配您当前的工作目录。

如果您发现这个惊人的结果,请查看我的 link 到我的 NeoVim 配置。