Como aplicar uma configuração em todas as guias e janelas abertas?

17

Existe uma opção para aplicar uma configuração em todas as guias e janelas, por exemplo, aplicar :set numbera todas as guias abertas?

vfclists
fonte

Respostas:

17

Sim existe! Você pode conseguir isso com :tabdoe :windo. Para o seu caso especificamente:

:tabdo windo set number

Veja :help :tabdoe :help :windopara mais informações.

Tumbler41
fonte
4
:tabdonão é suficiente. :help :tabdodiz que opera na janela atual de cada ficha de registro. Para executar um comando em todas as janelas e em todas as guias, você precisará :tabdo windo set number.
precisa saber é o seguinte
Ponto justo! Eu vou atualizar.
precisa saber é o seguinte
7

:tabdo windo set numberfaz o trabalho, mas eu realmente não gosto, pois ele alterna para cada guia e janela antes de executar o comando. Depois de terminar a execução, você terminará na última janela da última guia.

Eu acho que essa é uma maneira mais limpa de definir opções em todas as janelas sem alterar a guia e a janela atuais:

function! s:set_all(option, val, ...) abort
  let val = eval(a:val)

  for t in range(1, tabpagenr('$'))
    for w in range(1, tabpagewinnr(t, '$'))
      if gettabwinvar(t, w, '&buftype') !=# ''
        continue
      endif
      call settabwinvar(t, w, '&'.a:option, val)
    endfor
  endfor
endfunction

command! -complete=option -nargs=+ SetAll call s:set_all(<f-args>)

A execução :SetAll number 1ativará a coluna numérica em todas as janelas, exceto as que foram buftypedefinidas, como as janelas de ajuda.

Este é o mesmo que correr: :tabdo windo let &number = 1. Portanto, o segundo argumento precisa ser uma expressão atribuível. Em vez de :set filetype=ini, seria :SetAll filetype "ini".

Tommy A
fonte
1
Também adicionarei (ao lado de alterar a guia / janela atual) que :tabdo windopode acionar comandos automáticos e diminuir as configurações das opções. Embora a solução de Tommy A não possa ser usada imediatamente, é a preferida em plugins.
Luc Hermitte