В Vim, как открыть проводник в текущем рабочем каталоге?

#vim

#vim

Вопрос:

В Windows я хочу открыть explorer.exe в текущем рабочем каталоге.

Я пробовал это, но не работает

nnoremap <leader>e :!start explorer /select,getcwd()<CR>

Я получил его из этого, который работает (но открывает текущий файл буфера, который мне не нужен)

nnoremap <leader>f :!start explorer /select,%:p<CR>

Комментарии:

1. Я сильно подозреваю, что getcwd() не вызывается в vim, а передается в оболочку как есть. Похоже, что так обстоит дело с ... :!echo getcwd()<CR> на моей машине.

2. @Michail Я тестировал его, и, похоже, это так, поскольку он продолжает открывать ~/ My Documents для меня в Windows 7.

Ответ №1:

getcwd() не раскрывается перед передачей командному интерпретатору.

Обходной путь, измененный из справки для :! и :exe , будет следующим:

nnoremap <leader>e :execute "!start explorer /select," . shellescape(getcwd(),1)

Результат getcwd() функции добавляется к !start команде перед передачей в командную оболочку / интерпретатор команд, и shellescape() функция используется для экранирования любого пробела или других специальных символов, которые могут быть в пути, хотя это не должно быть проблемой с проводником Windows.

Комментарии:

1. Я не знаю, нужно ли это для cmd и explorer , но обычно разумно дополнительно shellescape указать путь, на случай, если он содержит пробелы или специальные символы.

2. Похоже, это не проблема с Explorer, но я добавлю это к ответу.