问题 如何在vimrc中轻松测试guifont?


我有许多不同的机器,我正在登录,没有一个共同的字体。所以,我希望能够拥有我对字体的第一个优先权,但如果机器上不存在另一个字体,依此类推。有没有人这样做过?

...

因此,在重新阅读guifont的帮助后,似乎我应该可以使用逗号分隔多个字体。有趣的是,虽然我的.vimrc中有以下行:

set guifont=-dt-interface\ user-medium-r-normal-*-*-100-*-*-m-*-iso8859-1,Liberation\ Mono\ 8

在一台机器上(gvim 7.1),我做了一个

:set gfn?
guifont=-dt-interface user-medium-r-normal-*-*-100-*-*-m-*-iso8859-1

在另一台机器(gvim 7.2)上我得到:

:set gfn?
guifont=-dt-interface user-medium-r-normal-*-*-100-*-*-m-*-iso8859-1,Liberation Mono 8

我将尝试在错误的机器上运行7.1,看看它是否解决了问题,如果是这样,它看起来不像7.2中的错误?


这是我解决问题的代码。它似乎非常脆弱,但它至少让我现在可以在我的实际工作中取得一些进展:

" SETTINGS FOR GUI ONLY MODE
: Trying to emulate how it should work but on some machines it will not select the available font
" set guifont=-dt-interface\ user-medium-r-normal-*-*-100-*-*-m-*-iso8859-1,Liberation\ Mono\ 8
let g:MyFontPre = ''
let g:MyFontPost = ''
let g:MyFontSize = '8'
if has("gui_running")
    if ( match(hostname(), 'server5-1..') >= 0 )
      let g:MyFontSize = '10'
      let g:MyFontPre = '-dt-interface\ user-medium-r-normal-*-*-'
      let g:MyFontPost = '0-*-*-m-*-iso8859-1'
    elseif ( match(hostname(), 'server5-3..') >= 0 )
      let g:MyFontPre = 'Liberation\ Mono\ '
      let g:MyFontPost = ''
    else
      " Leave it the default for now
    endif
    execute "set guifont=".g:MyFontPre."".g:MyFontSize."".g:MyFontPost
endif


" FONT SIZE SHORTCUTS
function! ToggleMyFontSize()
  if ( g:MyFontSize == 12 )
    let g:MyFontSize = 8
    execute "set guifont=".g:MyFontPre."".g:MyFontSize."".g:MyFontPost
  elseif ( g:MyFontSize == 8 )
    let g:MyFontSize = 10
    execute "set guifont=".g:MyFontPre."".g:MyFontSize."".g:MyFontPost
  elseif ( g:MyFontSize == 10 )
    let g:MyFontSize = 12
    execute "set guifont=".g:MyFontPre."".g:MyFontSize."".g:MyFontPost
  endif
endfunction
nnoremap  <silent>  <F12> :call ToggleMyFontSize()<CR>

9197
2018-06-17 20:56


起源

所以该机器上提供的另一个版本的vim是7.0,它提供了与之前看到的相同的行为7.2 ...非常奇怪。它必须与为特定机器编译的东西有关吗?!?!有没有人有任何想法?与此同时,我正在研究基于“太多PHP”的建议的解决方案。 - stephenmm
我认为我的IT部门也应该使用字体服务器xfs,以便所有机器都具有相同的字体。我已经为他们订了票了。他们在这里讨论xfs: tldp.org/HOWTO/NCD-X-Terminal-6.html - stephenmm
另外,如果你想使用正则表达式,你可以这样做:if hostname()= ~'server5-1 ..' - too much php


答案:


不能直接解决您的问题,但您可以使用 hostname() 和条件语句,以选择您想要的字体:

  if hostname() == 'home-pc'
      set guifont=...
  elseif hostname() == 'work-pc'
      set guifont=...
  else
      set guifont=...
  endif

5
2018-06-18 02:54



对不起,那只是......呃。不需要。重点应该是在一台你不太了解或没有时间完全按照你想要的配置的机器上轻松设置Vim。 - Kyle Strand


如果使用逗号不适合你,那么如何允许优雅的字体降级呢?此技巧也可用于其他“设置”选项。

silent! set guifont=Font\ One:h8
if &guifont != 'Font One:h8'
    set guifont=Font\ Two:h8
endif

6
2017-10-12 09:27





您还可以将所有常用设置放入 .vimrc 并选择机器特定的字体 .gvimrc (如果您是Windows用户,请使用 _vimrc 和 _gvimrc 代替)。

我知道这不是你问题的直接答案,但我发现值得指出它。 :)


1
2018-06-29 19:32



是的好主意;我通过这样做 source ~/local/.vimrc 在我的 ~/.vimrc。 - Ingo Karkat


Unix唯一解决方案,在linux上测试过。我猜这可能适用于OSX,但我从未使用过OSX,抱歉。

let font = {"name" : "fontNameHere", "size" : "12"}
call system("fc-list -q " . font.name)
if has("unix") && !v:shell_error
    let &guifont=join(values(font))
end

只需将字典中的字体名称和大小替换为您想要的字体名称和大小即 -

let font = {"name" : "DejaVuSansMono", "size" : "12"}

0
2017-12-28 17:31