Как применить настройки во всех открытых вкладках и окнах?

17

Есть ли возможность применить настройку во всех вкладках и окнах, например, применить :set numberко всем открытым вкладкам?

vfclists
источник

Ответы:

17

Да, есть! Вы можете сделать это с помощью :tabdoи :windo. Для вашего случая специально:

:tabdo windo set number

Смотрите :help :tabdoи :help :windoдля получения дополнительной информации.

Tumbler41
источник
4
:tabdoнедостаточно :help :tabdoговорит, что работает в текущем окне каждой вкладки. Чтобы выполнить команду во всех окнах во всех вкладках, вам нужно :tabdo windo set number.
garyjohn
Честная оценка! Я обновлю.
Tumbler41
7

:tabdo windo set numberвыполняет работу, но мне это не очень нравится, поскольку она фактически переключается на каждую вкладку и окно перед запуском команды. После того как он завершится, вы окажетесь в последнем окне последней вкладки.

Я думаю, что это более чистый способ установки параметров во всех окнах без изменения текущей вкладки и окна:

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

Запуск :SetAll number 1активирует колонку с цифрами во всех окнах, кроме тех, которые buftypeустановлены, например, окна справки.

Это то же самое , как работает: :tabdo windo let &number = 1. Итак, второй аргумент должен быть присваиваемым выражением. Вместо :set filetype=iniэтого было бы :SetAll filetype "ini".

Томми А
источник
1
Я также добавлю (помимо изменения текущей вкладки / окна), что :tabdo windoможет вызвать автокоманды, и замедлить настройки параметров. Хотя решение Tommy A нельзя использовать «из коробки», его лучше использовать в плагинах.
Люк Эрмит