OS X + Vim: Открыть Finder для папки в NerdTree (Vim)

2302
Jason

Я религиозно использую плагин NerdTree для MacVim и часто хочу открыть папку в Finder для работы с файлами. Примером может быть предварительный просмотр и копирование некоторых изображений.

Есть ли быстрый способ сделать это, не требующий изменения текущего каталога? Мой идеальный сценарий будет:

  • Переместить курсор в нужную папку
  • Нажмите "некоторую клавишу"
  • Папка открывается в видоискателе.
5

2 ответа на вопрос

2
joshperry

Это доступно прямо из коробки с NERDTree сейчас как часть плагина fs_menu.vim . На самом деле, эта функция работает только на Mac:

if has("gui_mac") || has("gui_macvim") || has("mac") call NERDTreeAddMenuItem({'text': '(r)eveal in Finder the current node', 'shortcut': 'r', 'callback': 'NERDTreeRevealInFinder'}) call NERDTreeAddMenuItem({'text': '(o)pen the current node with system editor', 'shortcut': 'o', 'callback': 'NERDTreeExecuteFile'}) call NERDTreeAddMenuItem({'text': '(q)uicklook the current node', 'shortcut': 'q', 'callback': 'NERDTreeQuickLook'}) endif 

Перейдите к узлу в представлении NERDTree, введите, mчтобы вызвать меню fs, а затем oоткрыть текущий узел. Каталоги будут открыты в новом окне Finder, файлы будут открыты в приложении, которое вы установили в качестве редактора по умолчанию для типа файла.

Это завершенные комплименты команды open :

function! NERDTreeExecuteFile() let treenode = g:NERDTreeFileNode.GetSelected() if treenode != {} call system("open '" . treenode.path.str() . "'") endif endfunction 
Это здорово, спасибо, что так долго продолжали. Только что попробовал и работает отлично! :) Jason 7 лет назад 1
1
romainl

Команда оболочки для открытия папки

$ open /path/to/folder 

В функции Vim эта команда может быть вызвана так:

let g:mypath = /path/to/folder execute "silent !open " . g:mypath 

Документация NERDTree содержит простой и понятный пример :

call NERDTreeAddKeyMap({ \ 'key': 'foo', \ 'callback': 'NERDTreeCDHandler', \ 'quickhelpText': 'echo full path of current node', \ 'scope': 'DirNode' })  function! NERDTreeCDHandler(dirnode) call a:dirnode.changeToDir() endfunction 

что вы можете расширить с помощью глобальных объектов, перечисленных несколькими строками выше :

g:NERDTreePath g:NERDTreeDirNode g:NERDTreeFileNode g:NERDTreeBookmark 
Уверен, что ваши ссылки на документацию устарели. Ben 10 лет назад 0
@ Бен, такого рода вещи могут случиться, да. Ссылки исправлены. romainl 10 лет назад 0
@romainl это случилось снова! может быть ссылка на конкретный коммит kroe 8 лет назад 0
@kroe, исправлено снова, надеюсь, на этот раз навсегда. romainl 8 лет назад 0