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 .


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

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.