Renomeando um arquivo no vim sem alterar seu caminho

1

Eu estou usando este plugin para renomear arquivos, mas eu queria saber se é possível especificar apenas uma mudança de nome. Por exemplo, se eu renomear um arquivo que não esteja no :pwde não especificar seu caminho, ele será movido para o diretório atual.

Estou usando este mapeamento: nnoremap <F6> :Rename

Então, talvez eu possa colocar alguma variável após o comando: Rename que colocará o caminho relativo e o nome do arquivo atual?

Obrigado!

Ivan
fonte
Existe uma razão pela qual você não pode usar o mv de fora do VIM?
MDMarra
Porque eu não quero mudar e, em seguida, reabrir o arquivo no vim
Ivan
2
Você poderia fazer isso dentro do Vim com :!mv <oldname> <newname>. De fato, no seu caso, você poderia executar :!mv % %:h/newnamee o Vim expandiria %para o nome do arquivo atual e %:hpara o diretório pai do nome do arquivo atual quando o comando for executado. Veja :help filename-modifiers.
garyjohn
Isso é legal Existe uma maneira de incluir o modificador em um mapeamento? <C-R>%:napenas parece levar% em conta e: n é impresso literalmente.
Ivan
2
Se você quiser expandir %:h(isso é um h, não um n) antes que o comando seja executado, use <C-R>=expand("%:h")<CR>. O =refere-se ao registrador de expressão (consulte :help c_CTRL-R_=), que solicita uma expressão. Uma expressão pode ser uma chamada de função; expand()é uma função que expande seu argumento. (Veja :help expand().) O <CR>termina a expressão para que seu valor seja colocado onde você digitou o Ctrl-R. Seu mapeamento poderia ser algo como nnoremap <F6> :!mv % <C-R>=expand("%:h")<CR>/. Note que eu escolhi não expandir o primeiro % até que o comando seja executado.
garyjohn

Respostas:

3

O Vim mantém o nome do arquivo atual no %registro. Você pode inserir o valor de um registro na linha de comando digitando Ctrl-Rseguido pelo nome do registrador. Portanto, você deve ser capaz de digitar <F6> Ctrl-R %(sem os espaços intervenientes) e ver algo assim na linha de comando:

:Rename /full/path/to/the/current/file

Você pode então editar o último componente do caminho completo para alterar o nome.

Observe que o Vim se expande %para o nome do caminho completo somente se o diretório de trabalho atual for diferente do diretório pai do arquivo. Caso contrário, o Vim se expande %para apenas o nome do arquivo.

Veja também

:help quote%
:help c_CTRL-R
garyjohn
fonte
Doce! Alguma maneira de colocar isso no nnoremap? Eu tentei, nnoremap <F6> :Rename <Ctrl>R %mas isso apenas imprime literalmente em vez de simular as teclas pressionadas.
Ivan
Nevermind, é<C-R>%
Ivan