Jak zastosować ustawienie we wszystkich otwartych kartach i oknach?

17

Czy istnieje opcja zastosowania ustawienia we wszystkich kartach i oknach, np. Zastosowanie :set numberdo wszystkich otwartych kart?

vfclists
źródło

Odpowiedzi:

17

Tak jest! Możesz to zrobić za pomocą :tabdoi :windo. W konkretnym przypadku:

:tabdo windo set number

Zobacz :help :tabdoi :help :windowięcej informacji.

Tumbler41
źródło
4
:tabdonie jest wystarczający. :help :tabdomówi, że działa w bieżącym oknie każdej strony karty. Aby wykonać polecenie we wszystkich oknach na wszystkich kartach, będziesz potrzebować :tabdo windo set number.
garyjohn
Uczciwy punkt! Zaktualizuję.
Tumbler41
7

:tabdo windo set numberwykonuje zadanie, ale nie podoba mi się to, ponieważ faktycznie przełącza się na każdą kartę i okno przed uruchomieniem polecenia. Po zakończeniu działania wyświetli się ostatnie okno ostatniej karty.

Myślę, że jest to czystszy sposób ustawiania opcji we wszystkich oknach bez zmiany bieżącej karty i okna:

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>)

Uruchomienie :SetAll number 1spowoduje włączenie kolumny liczb we wszystkich oknach, z wyjątkiem tych, które zostały buftypeustawione, takich jak okna pomocy.

To jest taki sam, jak działa: :tabdo windo let &number = 1. Zatem drugi argument musi być przypisywalnym wyrażeniem. Zamiast :set filetype=initego byłoby :SetAll filetype "ini".

Tommy A.
źródło
1
Dodam również (oprócz zmiany bieżącej karty / okna), które :tabdo windomogą wyzwalać automatyczne polecenia i spowalniać ustawienia opcji. Chociaż rozwiązania Tommy'ego A nie można używać od razu po wyjęciu z pudełka, preferuje się je we wtyczkach.
Luc Hermitte