#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, но я добавлю это к ответу.