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

#1 楼

就在这里!您可以使用:tabdo:windo完成此操作。具体针对您的情况:

:tabdo windo set number


有关更多信息,请参见:help :tabdo:help :windo

评论


:tabdo是不够的。 :help:tabdo表示它在每个标签页的当前窗口中运行。要在所有选项卡的所有窗口中执行命令,您需要:tabdo windo set number。

–加里约翰
17年4月12日在0:13

有道理!我会更新。

– Tumbler41
17年4月12日在1:42

#2 楼

: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"

评论


我还将添加(更改当前选项卡/窗口)::tabdo windo可能会触发自动命令,并减慢选项设置。尽管Tommy A的解决方案不能直接使用,但它是插件中首选的解决方案。

–卢克·赫米特(Luc Hermitte)
17年4月12日在8:00