Как сохранить текущий рабочий каталог в Windows gVim при запуске! командная или системная () функция - PullRequest
1 голос
/ 21 октября 2019

Я уже использовал vim в linux, приятно выполнить ":! External-command" или вызвать функцию "system ()", текущий рабочий каталог передается сработавшей внешней команде.

Но теперь я должен работать в системе Windows (10), ":!"Команда выполнит что-то вроде «cmd.exe / c ...», а текущим каталогом всегда является «C: \ WINDOWS \ system32 \». То же самое происходит с функцией "system ()" в скрипте viml, и по этой причине некоторые из моих плагинов не работают правильно.

Например, в gVim execute ":! Dir" будет просто перечислять файлыв "C: \ WINDOWS \ system32 \", а не в текущем рабочем каталоге gVim. Какие настройки приведут к тому, что в linux vim выполнит команду ":! Ls", чтобы вывести список файлов текущего каталога?

1 Ответ

0 голосов
/ 22 октября 2019

Это не нормальное поведение;Оболочка Windows (cmd.exe) должна поддерживать текущий рабочий каталог, и действительно многие плагины предполагают, что это происходит при выполнении внешних команд.

Как вы уже упоминали, проблема исчезнет, ​​если выукажите флаг /d для cmd.exe, должна быть какая-то команда autorun , вызывающая изменение каталога:

/ D Отключить выполнение команд автозапуска из реестра

[...]

Если / D НЕ было указано в командной строке, то при запуске CMD.EXE он ищет следующие переменные реестра REG_SZ/REG_EXPAND_SZ и, если присутствует одна или обе, они выполняются первыми.

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

    and/or

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

Итак, я бы посоветовал проверить эти ключи реестра и удалить любую оскорбительную команду. Добавление /D к Vim's 'shellcmdflag' было бы альтернативным решением.

...