Posso renomear arquivos em um diretório com o Vim?

3

Se eu abrir um diretório em vim usando vim . , irei obter uma interface do tipo navegador de arquivos do diretório atual. De lá, espera-se que navegue até um arquivo e comece a editá-lo.

Eu quero usar essa interface para renomear arquivos. Com vim rename funciona como %s/term1/term2/ , isso retorna: E21: Cannot make changes, 'modifiable' is off .

Existe uma maneira de transformar modifiable neste cenário, ou isso significa simplesmente que não pode ser feito assim com o vim?

    
por Questionmark 10.06.2014 / 18:55

4 respostas

6

Sim, não pode ser feito assim.

Essa "interface do tipo navegador de arquivos" é fornecida por um plug-in interno chamado netrw. É somente leitura então sim, você não pode modificá-lo.

Você deve pressionar R para renomear o arquivo sob o cursor ou os arquivos marcados.

Veja :help netrw , :help netrw-browse-maps e mais especificamente :help netrw-R .

Se você quiser renomear em lote os arquivos usando o Vim, tente qmv do pacote renameutils ou vidir do pacote moreutils (graças a Dmitry pelo heads-up).

    
por 10.06.2014 / 20:35
1

Confira o renamer.vim - Use o poder do vim para renomear grupos de arquivos plugar. Como netrw , ele apresenta o conteúdo do diretório em um buffer temporário e, em seguida, permite que você edite esse buffer e, finalmente, aplique as edições aos arquivos subjacentes.

    
por 11.06.2014 / 08:20
0

O Netrw permitirá que você aplique um padrão para renomear arquivos desde a v143. O procedimento: marque arquivos (use mr para marcar arquivos baseados em um padrão) e, em seguida, pressione R. Após a primeira consulta de renomeação, responda com a string s/-frompat-/-topat-/ em que -frompat- e -topat- são padrões de substituição vim. O código%  é necessário para isso. Exemplo:

s/\(.*\)\.c/.cpp/
    
por 14.06.2014 / 00:20
0

Eu tento usar "system ()" para realizar essa tarefa usando o shell (se for o caso, é claro) criando uma função para realizar essa tarefa em seu ".vimrc".

func! YourFunc() range

    let l:result = system("your shell command")

    [...]

endfunc

Veja um uso de "system ()" no link

[] 's

    
por 19.06.2014 / 17:38