OS X + Vim: Abra o Finder para uma pasta no NerdTree (Vim)

5

Eu uso o plug-in NerdTree para MacVim religiosamente, e muitas vezes desejo abrir uma pasta no Finder para trabalhar com o arquivos. Um exemplo seria querer visualizar e copiar algumas imagens.

Existe uma maneira rápida de fazer isso que não envolve a alteração do diretório atual? Meu cenário perfeito seria:

  • Mover o cursor para a pasta desejada
  • Pressione "algumas teclas"
  • A pasta é aberta no localizador.
por Jason 04.10.2012 / 19:12

2 respostas

2

Isso está disponível imediatamente com o NERDTree agora como parte do fs_menu. vim plugin. Na verdade, esse recurso só funciona no 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

Navegue até um nó na visualização NERDTree, digite m para exibir o menu fs e, em seguida, o para abrir o nó atual. Os diretórios serão abertos em uma nova janela do Finder, os arquivos serão abertos no aplicativo que você definiu como o editor padrão para o tipo de arquivo.

Isso é feito com os cumprimentos do comando :

function! NERDTreeExecuteFile()
    let treenode = g:NERDTreeFileNode.GetSelected()
    if treenode != {}
        call system("open '" . treenode.path.str() . "'")
    endif
endfunction
    
por 12.11.2016 / 02:00
1

O comando shell para abrir uma pasta é

$ open /path/to/folder

Em uma função do Vim, esse comando pode ser chamado assim:

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

A documentação do NERDTree tem um exemplo simples e fácil de seguir :

call NERDTreeAddKeyMap({
       \ 'key': 'foo',
       \ 'callback': 'NERDTreeCDHandler',
       \ 'quickhelpText': 'echo full path of current node',
       \ 'scope': 'DirNode' })

function! NERDTreeCDHandler(dirnode)
    call a:dirnode.changeToDir()
endfunction

que você pode expandir usando os objetos globais listados algumas linhas acima :

g:NERDTreePath
g:NERDTreeDirNode
g:NERDTreeFileNode
g:NERDTreeBookmark
    
por 04.10.2012 / 20:51