如何在所有打开的选项卡和窗口中应用设置?


17

是否可以在所有选项卡和窗口中应用设置,例如应用于:set number所有打开的选项卡?

Answers:


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的解决方案不能直接使用,但它是插件中首选的解决方案。
Luc Hermitte '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.