Como posso abrir um arquivo no VIM no modo readonly se ele já tiver um swapfile?

6

Quando eu uso o comando :e filename para abrir um arquivo e este arquivo já está aberto por outra instância vim, recebo um aviso perguntando se eu quero abrir o arquivo no modo somente leitura edite de qualquer maneira, recupere, saia ou aborte.

Quando eu tento :silent! e filename , o que acontece é que o vim parece ter sido enforcado. Mas, de fato, está me perguntando o que fazer com o swapfile, mas não consigo vê-lo porque falei para ficar em silêncio.

Existe algum comando no qual eu possa dizer para abrir o arquivo no modo somente leitura se o arquivo não puder ser aberto no modo de gravação e sem a necessidade do usuário interação? (Eu quero integrar isso em uma macro para pular / abrir arquivos).

    
por Grzegorz Adam Hankiewicz 22.01.2013 / 18:49

3 respostas

6

Se você tiver vim > = 7 (eu acho), você pode usar autocmd com um evento SwapExists . Lá você pode fazer tudo, de coisas muito simples a muito complicadas.
Aqui está um exemplo simples para colocar no seu ~ / .vimrc:

autocmd SwapExists * let v:swapchoice = "o"

Se existir um arquivo de troca, este evento será acionado. O autocmd acima simplesmente abrirá o arquivo no modo somente leitura.
Se v:swapchoice obtiver um valor em um autocmd, ele não perguntará o que você deseja fazer. Os valores que você pode usar estão listados aqui v: swapchoice .
Para um autocmd muito avançado, veja aqui: editexisting.vim
O script lá já pode estar no seu servidor a partir da instalação do vim, procure por editexisting.vim .

    
por 05.02.2013 / 02:05
4

Eu tenho um script no meu .vimrc , que faz exatamente isso. No entanto, faz isso para todos os arquivos abertos que possuem um arquivo swp. Não tenho certeza se você sempre quer esse comportamento. Talvez você possa ajustá-lo para atender às suas necessidades na macro que está escrevendo.

Para abrir ro se um arquivo swp estiver presente, coloque isso no seu .vimrc :

func CheckSwap()
  swapname
  if v:statusmsg =~ '\.sw[^p]$'
    set ro
  endif
endfunc

if &swf
  set shm+=A
  au BufReadPre * call CheckSwap()
endif

Eu tenho este script de aqui , há também um exemplo mais avançado que pode ser de interesse .

    
por 22.01.2013 / 19:19
1

O comando view no RHEL e no ubuntu abre o vim no modo readonly, embora você possa sobrescrever o modo readonly usando :w! .

    
por 22.01.2013 / 18:59

Tags