Как я могу создать папку, если она не существует, из .vimrc? - PullRequest
26 голосов
/ 11 октября 2009

Мне не нравится, как vim захламляет мои папки файлами резервных копий, поэтому в моем файле .vimrc есть следующая строка:

set backupdir=~/.vim_backup

Однако иногда эта папка не существует из-за новых машин, на которые я копирую свои пользовательские файлы.

Как я могу автоматически создать эту папку, если она не существует, из .vimrc? Или есть какой-то лучший способ справиться с этой ситуацией?

Ответы [ 6 ]

83 голосов
/ 19 сентября 2012

Я думаю, что это не зависит от операционной системы:

if !isdirectory("/my/directory")
    call mkdir("/my/directory", "p")
endif
26 голосов
/ 11 октября 2009

Вы можете поместить это в свой .vimrc:

silent !mkdir ~/.vim_backup > /dev/null 2>&1

Это попытается создать ~ / .vim_backup каждый раз, когда вы запускаете vim. Если он уже существует, mkdir сообщит об ошибке, но вы ее никогда не увидите.

9 голосов
/ 11 декабря 2011

Я предпочитаю уже размещенные однострочники. Однако я решил поделиться тем, что использовал:

function! EnsureDirExists (dir)
  if !isdirectory(a:dir)
    if exists("*mkdir")
      call mkdir(a:dir,'p')
      echo "Created directory: " . a:dir
    else
      echo "Please create directory: " . a:dir
    endif
  endif
endfunction

call EnsureDirExists($HOME . '/.vim_backup')
5 голосов
/ 10 мая 2017

Вы можете использовать функцию mkdir() Vim. Он также может создавать промежуточные каталоги и устанавливать соответствующие разрешения для каталога:

if !isdirectory($HOME . "/.vim/backup")
    call mkdir($HOME . "/.vim/backup", "p", 0700)
endif
1 голос
/ 11 марта 2012

У меня есть команда в моем vimrc , которая позволяет мне сделать каталог, соответствующий буферу, в настоящее время переднему:

nmap <silent> ,md :!mkdir -p %:p:h<CR>

Это может использоваться для создания каталога в любом месте, куда вы хотите поместить его локально или удаленно через netrw, если у вас есть для этого разрешения.

1 голос
/ 13 февраля 2010

Я хотел найти решение, которое бы работало как в Linux, так и в Windows (с бинарными файлами Cygwin в пути.) - моя конфигурация Vim разделена между ними.

Одной из проблем является то, что mkdir, я думаю, встроен в оболочку cmd в Windows, поэтому его нельзя переопределить, поместив исполняемый файл Cygwin mkdir ранее в путь.

Я решил эту проблему, вызвав новую оболочку bash для выполнения действия: оттуда mkdir всегда означает, какой исполняемый файл mkdir находится на пути:

!bash -c "mkdir -p ~/.vim-tmp"

Однако проблема в том, что. по крайней мере, в Windows появляется новое окно для оболочки cmd, которое '!' вызывает. Не хочу этого каждый раз, когда я начинаю vim. Затем я обнаружил функцию vim 'system', которая вызывает новую оболочку cmd (значок появляется на панели задач Windows), но окно свернуто. Следовательно:

call system("bash -c \"mkdir -p ~/.vim-tmp\"")

Ужасно, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...