Как создать папку, если она не существует, из .vimrc?
Мне не нравится, как vim загромождает мои папки с резервными файлами, поэтому у меня есть следующая строка в моем файле .vimrc:
set backupdir=~/.vim_backup
Однако иногда эта папка не существует из-за новых машин, где я копирую свои пользовательские файлы.
Как создать эту папку автоматически, если она не существует, из .vimrc? Или есть лучший способ справиться с этой ситуацией?
Ответы
Ответ 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, если у вас есть права на это.