Abra a lista de arquivos no diretório a partir do qual escolher o arquivo para editar no vim

0

No vídeo em Veja como eu trabalho nos trilhos ele obtém o primeiro saída de find . -type f e usa essa lista como um arquivo vim regular para pesquisar. Ele encontra esse arquivo na lista, ele pode abri-lo no vim. Isso parece realmente útil, mas ele não especifica o alias para fazê-lo. Alguém pode me dar o pseudônimo do mesmo?

    
por woodstok 21.08.2013 / 16:34

2 respostas

2

O que está acontecendo pode ser reunido a partir dos dotfiles do autor. Aviso! A coisa toda é bastante complicada (e inteligente).

  1. Este é o comando vim- bash:

    vim-() {
      vim -s <(printf '\eh')
    }
    

    Abre o Vim e simula uma sequência de teclas, <Esc>h .

  2. <Esc>h é mapeado para executar um comando personalizado, :FPScratchy , que por sua vez chama um script externo, ack_find .

    nmap <ESC>h :FPScratchy "ack_find"<CR>
    
  3. O propósito desse comando é criar uma "janela de rascunho" contendo a lista de arquivos gerada pelo comando externo e fazer alguns remapeamentos para navegação: <CR> no modo normal para abrir o arquivo sob o cursor, <CR> in modo visual para adicionar os arquivos selecionados ao arglist local e <Esc><CR> no modo normal para abrir o arquivo sob o cursor em uma janela dividida.

    function! FPScratchy(...)
      call call(function("Scratchy"), a:000)
      setlocal cursorline
    
      nmap <buffer> <CR> 0gf
      vmap <buffer> <CR> :Lines2arglocal<CR>
      nmap <buffer> <ESC><CR> 0<c-w>f<c-w>w
    endfunction
    command -nargs=* FPScratchy :call FPScratchy(<args>)
    
    function! Lines2arglocal() range
      let lines = map(range(a:firstline, a:lastline), 'getline(v:val)')
    
      execute "arglocal " . join(lines, " ")
    endfunction
    command -range Lines2arglocal <line1>,<line2>:call Lines2arglocal()
    
  4. O autor alterou seu método find para um ack -based um pouco mais envolvido há alguns anos . Não temos meios de saber o que ele usou diariamente, mas podemos supor que foi simples:

    $ find . -type f
    
por 22.08.2013 / 00:23
2

Existem várias maneiras de fazer isso. Para obter a saída desse comando em um buffer Vim, abra o Vim e execute

:r!find . type f

Outra maneira de fazer isso, usando o vim em um terminal, seria executar o seguinte no prompt do shell.

$ find . type f | vim -

Eu costumo colocar o cursor sobre o nome do arquivo desejado e digitar

<C-W>f

em que < C-W > significa Ctrl-W. Isso abrirá o arquivo em uma nova janela, o que evita o problema de tentar abrir um novo arquivo em um buffer modificado.

Outra abordagem seria executar primeiro

:set nomodified

Em seguida, digite

gf

Isso abrirá o novo arquivo no buffer / janela que continha a lista de arquivos.

Ainda outra maneira seria voltar a colocar o cursor sobre o nome do arquivo desejado e executar

:e! <C-R>f<CR>

em que < C-R > significa Ctrl-R e < CR > significa a tecla Enter. A combinação < C-R > f expandirá para o nome do arquivo sob o cursor.

Veja

:help :r!
:help CTRL-W_f
:help gf
:help 'modified'
:help c_CTRL-R_f
    
por 21.08.2013 / 17:19