Подтвердить что ты не робот

Как создать папку, если она не существует, из .vimrc?

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

set backupdir=~/.vim_backup

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

if !isdirectory("/my/directory")
    call mkdir("/my/directory", "p")
endif

Ответ 3

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

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')

Ответ 4

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

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

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

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

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

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

Уродливый, но работает.

Ответ 5

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

if !isdirectory($HOME . "/.vim/backup")
    call mkdir($HOME . "/.vim/backup", "p", 0700)
endif

Ответ 6

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

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

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