Linux. Vim. Как узнать директорию файла, редактируемого определенной инстанцией vim?
Я бы хотел составить скрипт, запускающий файловый менеджер с такой же директорией, какая мучается в определенном терминале с vim. В принципе, составлять подобные заклинания умею, но не знаю, как достать информацию о папке редактируемого файла из вимовского процесса. Не тороплюсь, буду рад любым мыслям.
Вот я редактирую один файл, потом нужно посмотреть второй в той же папке. По сочетанию клавиш запускаю файловый менеджер, и топаю ручками в папку проекта. А было бы здорово, если папка сразу была открыта нужная.
В дальнейшем бы развил идею, и если фокус не на терминале с vim, запускался бы менеджер с последней "заполненной" директорией.
Имею опыт доставания текста из заголовка активного окна. Возможно, есть какие-нибудь плагины на вим, устанавливающие такие заголовки терминала, какие мы настроим (по типу всяких airline и прочих кастомных статусных сообщений). Просто вообще пока не знаю, в какую сторону копать. Однажды-то получится, но насколько костыльным будет способ - отдельный вопрос.
NERDTree использовать не спортивно! Никаких вимовских окошек, для них у меня тайловый оконный менеджер. А вим, спустимся на землю, - всего лишь редактор, который должен быстро запускаться без плагинов и вот этого всякого.
Ответы (1 шт):
Установливать заголовок терминала автоматически по имени файла/директории можно опцией title, т.е. просто выполняете команду set title и получаете заголовок терминала типа first.txt (/tmp/so-example/) - VIM.
Из самого vim-а expand("%:p:h") разворачивается в полный путь к директории текущего файла. Можно использовать дальше как хочется.
Например, чтоб открыть командную строку с командой на открытие файла с заранее введенной директорией текущего файла:
:map <F6> :let @*=expand("%:p:h")<CR>:e <C-r>*/
Теперь после нажатия F6 можно ввести имя нового файла используя автодополение и т.д.
Я использую такие мапинги, чтоб скопировать имя файла, полное/относительное имя файла или директорию в буфер обмена:
" relative path (src/foo.txt)
nnoremap <leader>cfr :let @*=expand("%")<CR>
" absolute path (/something/src/foo.txt)
nnoremap <leader>cfa :let @*=expand("%:p")<CR>
" filename (foo.txt)
nnoremap <leader>cff :let @*=expand("%:t")<CR>
" directory name (/something/src)
nnoremap <leader>cfd :let @*=expand("%:p:h")<CR>
С лидером по умолчанию (,) нажимаю ,cfd и путь к директории скопирован в буфер обмена.
