Como passar o nome do arquivo atual com um caminho diferente para a linha de comando

8

Existe alguma maneira de fazer o símbolo especial %funcionar com nomes de caminho na linha de comando? Por exemplo, eu gostaria de fazer:

:diffsplit Path\to\other\directory\%

Para que eu possa fazer uma @:comparação rápida de arquivos com o mesmo nome. No entanto, isso apenas abre um novo buffer chamado %.

Claro que eu poderia fazer:

:exe 'diffsplit Path\to\other\directory\'.expand('%')

Mas isso é complicado, pois não consigo tabular diretórios completos ao digitar o comando.

Existe alguma outra maneira melhor de fazer isso?

Aqui está uma pergunta relacionada , mas não trata exatamente da minha situação.

Editar: Apenas para esclarecer, eu gostaria de poder reutilizar o comando exatamente para arquivos diferentes. Portanto, uma solução que simplesmente preenche automaticamente o arquivo atual na linha de comando não funcionará. O mesmo comando precisa funcionar para nomes de arquivos diferentes .

Tumbler41
fonte
Você pode usar um cmap para% de tal forma que ele se expande para o nome do arquivo que ajuda poder: D
SibiCoder
Isso tem o mesmo problema que a solução de Kent. Assim que você pressionar %, ele será preenchido com o nome do arquivo, mas quando eu quiser reutilizar essa linha, o nome do arquivo antigo ainda estará presente. Eu gostaria que o% inserisse dinamicamente o nome do arquivo atual, seja lá o que acontecer no momento, sem precisar redigitá-lo.
Tumbler41
2
:diffsplit Path/to/other/directory/%:t
Sato Katsura
Uau, eu pensei que eu tentei isso, mas você está certo que funciona! Obrigado! Se você quiser responder, eu aceito.
precisa saber é o seguinte

Respostas:

10

Caracteres especiais (consulte :h cmdline-special) e modificadores de nome de arquivo (consulte :h filename-modifiers) são expandidos na linha de comando, portanto:

:diffsplit Path/to/other/directory/%:t
Sato Katsura
fonte
1

Acontece que é um problema estúpido do Windows. O remédio para isso é simplesmente usar barras no nome do caminho. ou seja, :diffsplit Path/to/other/directory/%funciona muito bem.

Corrigi isso no meu sistema usando a opção set shellslashque usa como padrão barras invertidas, mesmo no Windows.

Tumbler41
fonte
Sim, a barra invertida é usada para escapar do significado especial de %e é o separador de caminho padrão no Windows. Vim não sabe dizer o que você tinha em mente.
Ingo Karkat 9/09/16
Veja, eu pensei nisso. Então imaginei que poderia fazer um, directory\\%mas isso ainda não funcionava. IDK, mas acho que não importa, já que as barras resolvem o problema.
precisa saber é o seguinte
0

Não sei se está tudo bem para você:

:diffsplit Path/to/somewhere/<c-r>%

Apenas mais uma tecla no original, a <C-r>, para preencher o %valor do registro.

Kent
fonte
Isso ainda não permite o uso @:de arquivos futuros, pois "codifica" o nome do arquivo atual.
Tumbler41
Em seguida, agrupe um comando personalizado :Mydiff /path/to/there/para que o caminho seja preenchido com tabulação. basta passar isso para o seu comando / função com #exec
277/16 Kent