Bagaimana cara menerapkan pengaturan di semua tab dan jendela yang terbuka?

17

Apakah ada opsi untuk menerapkan pengaturan di semua tab dan jendela, mis. Berlaku :set numberuntuk semua tab yang terbuka?

vfclists
sumber

Jawaban:

17

Ya ada! Anda dapat mencapai ini dengan :tabdodan :windo. Khusus untuk kasus Anda:

:tabdo windo set number

Lihat :help :tabdodan :help :windountuk informasi lebih lanjut.

Tumbler41
sumber
4
:tabdoTidak cukup. :help :tabdomengatakan bahwa ia beroperasi di jendela saat ini dari setiap halaman tab. Untuk menjalankan perintah di semua jendela di semua tab yang Anda perlukan :tabdo windo set number.
garyjohn
Titik adil! Saya akan memperbarui.
Tumbler41
7

:tabdo windo set numbermenyelesaikan pekerjaan, tapi saya tidak terlalu suka karena itu benar-benar beralih ke setiap tab dan jendela sebelum menjalankan perintah. Setelah selesai berjalan, Anda akan berakhir di jendela terakhir dari tab terakhir.

Saya pikir ini adalah cara yang lebih bersih untuk mengatur opsi di semua jendela tanpa mengubah tab dan jendela saat ini:

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

Menjalankan :SetAll number 1akan mengaktifkan kolom nomor di semua jendela, kecuali yang telah buftypeditetapkan, seperti jendela bantuan.

Ini adalah sama dengan menjalankan: :tabdo windo let &number = 1. Jadi, argumen kedua harus berupa ekspresi yang dapat ditentukan. Alih-alih :set filetype=ini, itu akan terjadi :SetAll filetype "ini".

Tommy A
sumber
1
Saya juga akan menambahkan (di samping mengubah tab / jendela saat ini) yang :tabdo windodapat memicu perintah otomatis, dan memperlambat pengaturan opsi. Sementara solusi Tommy A tidak dapat digunakan di luar kotak, itu yang lebih disukai dalam plugin.
Luc Hermitte