Открытие каталога в vim

Я - пользователь Mac, предлагающий vim серьезную попытку. Большинство редакторов GUI, которые я использую, позволяют мне открыть каталог как "проект", выполнив команду, например:

edit ~/www/example.com/

Обозначенный vim эквивалент vim ~/www/example.com/ покажет мне список файлов в каталоге, и я могу их открыть. Но он не устанавливает рабочий каталог vim для этого пути, я должен запустить :cd ., чтобы установить рабочий каталог.

Есть ли какой-нибудь способ, возможно, с оболочкой script, открыть vim и установить ли его рабочий каталог на заданный путь?

Я использую MacVim, если это имеет значение.

Ответы

Ответ 1

Благодаря @sehe предложениям, я придумал это. Не уверен, что это лучшее решение, но, похоже, оно работает.

#!/bin/bash

if [ "$#" -eq 1 ];then # is there a path argument?
  if test -d $1;then # open directory in vim
    vim $1 +':cd %'
  else # open file in vim
    vim $1 +':cd %:h'
  fi
else # no path argument, just open vim
  vim 
fi

Ответ 2

Braindead:

 (cd /path/to/dir && vim file)

Меньше:

 vim /path/to/dir/file +':cd %:h'

Вы всегда можете сопоставить :cd %:h с удобным ключом или поставить автокоманду (я бы не рекомендовал последнее, но спорить о вкусе нет)


Oh и для каталогов вместо файлов:

:cd %

вполне достаточно

Ответ 4

Попробуйте добавить следующее к вашему .vimrc

let g:netrw_liststyle=3
let g:netrw_keepdir=0

Это приведет к тому, что просмотр в каталоге использует стиль дерева для отображения файлов (вы можете развернуть каталог, поместив курсор в каталог и нажав клавишу enter) и сделайте текущий рабочий каталог тем, который вы просматриваете.

Вы также можете быть заинтересованы в плагине NERDTree, который предоставляет браузер каталогов, который более продвинут, чем встроенный. У него есть опция

let g:NERDTreeChDirMode=2

чтобы текущий каталог соответствовал корню отображаемого дерева или

let g:NERDTreeChDirMode=1

чтобы изменить каталог всякий раз, когда вы используете команду (:e или :NERDTree), чтобы просмотреть новый каталог.

Ответ 5

$ cd ~/my/working/directory
$ vim .