Exiba o nome do arquivo atual para edição na linha de comando

10

Como posso abrir o caminho para o arquivo atual na linha de comando, para digitar um nome de arquivo semelhante? Não quero uma abreviação que seria substituída pelo nome do arquivo atual. Quero editar o nome do arquivo, completo com o caminho do diretório. Por exemplo, quero :editum arquivo com um nome semelhante ou em um diretório semelhante, por exemplo

vim src/submodule/frontend/frobnicate2.c

e agora quero editar ../trunk/src/submodule/frontend/frobnicate.ce só quero inserir ../trunke remover o 2e não redigitar o caminho completo.

É claro que posso voltar ao shell e usar seu histórico de comandos ou copiar e colar o caminho na GUI, mas estou procurando uma maneira mais eficiente que não exija a saída do Vim.

Gilles 'SO- parar de ser mau'
fonte

Respostas:

11

Além de inserir o %registro como você se descobriu, você também pode usá-lo :edit %<Tab>.

De :help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

Então você pode, por exemplo, usar:

:edit %.orig

para editar file.txt.orig. Para o seu exemplo, digite :e ../trunk/%: pressione <Tab>para obter o nome do arquivo com o caminho relativo e remova o 2antes de pressionar <Enter>.

Você pode adicionar alguns modificadores ao caminho para modificá-lo; Eu achei :hparticularmente útil, ele obtém o "dirname" (ou "head" no Vim-speak ") do caminho atual:

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

Você pode até usar :hvárias vezes. Por exemplo:

:edit %:h:h:h/file.txt

Vai abrir file/in/a/deeply/file.txt

Também há o :pque fornece o caminho completo e que pode ser útil no seu caso: digite :e %:p, pressione <Tab>e edite o caminho, conforme desejado. Você ainda pode usar vários modificadores, por exemplo: :e %:p:h.

Veja :help filename-modifiersa lista completa.

Nota: se você <Tab>, o Vim expandirá o %. Se você usar <C-d>, o Vim não expandirá o %(mas o substituirá %ao concluir o caminho).

Martin Tournoij
fonte
5

Oh Procure por "nome do arquivo" em :help :! É simples: para inserir o especial r egister , ou seja, o nome do arquivo atual.CTRL-R %%

Gilles 'SO- parar de ser mau'
fonte
1
Portanto, com base na sua resposta: para obter o caminho completo conforme o OP solicitado, você faria algo assim Ctrl-r =expand('%:p'). Isso usa o registrador = .
Lcd047 /
3

Se você configurou sua pathvariável vim , terá todo o poder do :findcomando, ou seja, preenchimento de tabulação de nomes de arquivo (sem a necessidade de especificar a parte do diretório!)

No seu caso, algo como

set path=./**

pode ser tudo o que você precisa para :fin frob<tab>trabalhar. Para os detalhes, :help find, :help file-searching.

Jens
fonte
0

Aqui está um mapeamento que você pode tentar:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

Isso salva o comando atual e define o registro 'a' para o nome do arquivo atual. Em seguida, o último comando é chamado e anexado ao conteúdo do registro 'a'. Obviamente, se você tiver algo útil no registro 'a', isso o substituirá.

Você pode alterar os caracteres mapeados para outra coisa. Eu gosto de usar a tecla Alt, mas ela não funciona em alguns terminais.

Como Carpetsmoker apontou em sua resposta, você pode alterar a chamada de função para

expand('%:p')

para forçar o caminho completo.

Frank
fonte
1
Isso seria inútil anular o registro a. Tente algo parecido com isto:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047 3/15