Как установить каталог backupdir и swap, хранящийся локально, в рабочий каталог, используя относительный путь ./ в Vim? - PullRequest
1 голос
/ 17 апреля 2019

Сводка: Я пытаюсь заставить Vim хранить резервную копию файлов, swap файлов и отменить файлов в каталогеотносительно рабочего каталога, чтобы я мог переместить эти файлы с рабочим каталогом (например, на USB-накопителе).

Справочная информация: Я написал функцию, которая устанавливает backupdir,directory и undodir настройки при первом запуске Vim.Я установил в настройках первоначальный поиск относительных путей в рабочем каталоге сначала (который будет на USB-накопителе), затем поиск централизованного каталога в ~/vim/scratch_files/, централизованномкаталог, который я бы предпочел не использовать, если доступен относительный путь.

Однако, независимо от того, какие относительные пути я указал, Vim просто настаивает на использовании централизованного пути, будь то тестирование на установках Linux или Windows Vim.

Исследование: Я проверил файлы справки (в :help backupdir), страницы Vim Fandom и Stack Exchange, искал решения и не смог найти ничего, что могло бы его сделать.работа.

ПРИМЕР: Вот минимально рабочий пример того, о чем я говорю.У меня есть строка в моем .vimrc, которая добавляет файл, например, scratchfiles.vim, в переменную runtimepath со следующим кодом:

    function! SetLocalScratchFiles()
        " Turn the settings on
        set backup
        set writebackup
        set swapfile

        if has("win32") || has("win64")
            " The // gets replaced with a %-substituted path for a filename in the destination scratch file in Windows as per :h backupdir (i.e., C%%path%to%file.txt.swp)
            set backupdir^=.\\_scratch\\backup//,.\\.scratch\\backup//,$HOME\\.vim\\scratch_files\\backup//,.
            set directory^=.\\_scratch\\swap//,.\\.scratch\\swap//,$HOME\\.vim\\scratch_files\\swap//,.
        else
            set backupdir^=./_scratch/backup//,./.scratch/backup//,~/.vim/scratch_files/backup//,.
            set directory^=./_scratch/swap//,./.scratch/swap//,~/.vim/scratch_files/swap//,.
        endif
        " Undo Directory:
        if has('persistent_undo')
            if has("win32") || has("win64")
                set undodir^=.\\_scratch\\undo//,.\\.scratch\\undo//,$HOME\\.vim\\scratch_files\\undo//,.
            else
                set undodir^=./_scratch/undo//,./.scratch/undo//,~/.vim/scratch_files/undo//,.
            endif
            set undofile
        endif
    endfunction
    autocmd VimEnter * call SetLocalScratchFiles()

Предполагается, что (а) будет искать локальный каталог относительнотекущий рабочий каталог с именем ./_scratch/ для подкаталогов / backup /, / swap / и / undo /.Затем, если это не найдено, (b) ищите те же самые подкаталоги в ./.scratch/.ТОГДА, если это не найдено, используйте ~/.vim/scratch_files/.

ВОПРОС:

Проблема в том, что независимо от того, сколько различных типов относительных путей я передаю этим настройкам, Vimвсегда выбирает один централизованный каталог.Как мне сделать так, чтобы сначала распознал эти относительные пути ?Возможно, что-то не так с тем, как я отформатировал пути?

1 Ответ

1 голос
/ 18 апреля 2019

Проблема заключалась в размещении этих настроек внутри функции, которая вызывается autocmd VimEnter * ... - после удаления первых и последних двух строк из предыдущего кода распознаются локальные каталоги и задаются правильные относительные пути. Я считаю, что это связано с порядком, в котором Vim обрабатывает autocmd. Он должен их отключить после просмотра настроек ванили в vimrc.

Нижняя строка не должна устанавливать backupdir, undodir или directory через VimEnter, поскольку они должны быть установлены раньше, чем при вызове VimEnter.

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