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


17

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

Ответы:


17

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

:tabdo windo set number

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


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 нельзя использовать «из коробки», его лучше использовать в плагинах.
Люк Эрмит
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.