如何在vimrc中轻松测试GUI字体?
我有许多不同的机器,我登录,没有一个有像样的共同字体。因此,我希望能够有我的第一个首选的字体,但如果它不存在的机器上使用另一个等等。以前有人这样做过吗 因此,在重新阅读关于guifont的帮助后,我似乎应该能够用逗号分隔多个字体。有趣的是,尽管我的.vimrc中有以下行:如何在vimrc中轻松测试GUI字体?,vim,Vim,我有许多不同的机器,我登录,没有一个有像样的共同字体。因此,我希望能够有我的第一个首选的字体,但如果它不存在的机器上使用另一个等等。以前有人这样做过吗 因此,在重新阅读关于guifont的帮助后,我似乎应该能够用逗号分隔多个字体。有趣的是,尽管我的.vimrc中有以下行: set guifont=-dt-interface\ user-medium-r-normal-*-*-100-*-*-m-*-iso8859-1,Liberation\ Mono\ 8 在一台机器上(gvim 7.1),
set guifont=-dt-interface\ user-medium-r-normal-*-*-100-*-*-m-*-iso8859-1,Liberation\ Mono\ 8
在一台机器上(gvim 7.1),我做了一个
在另一台机器(gvim 7.2)上,我得到:
我将尝试在不正确的机器上运行7.1,看看它是否修复了问题,如果修复了问题,它看起来是否像7.2中的一个bug
解决方案 这是我用来解决这个问题的代码。这看起来很脆弱,但至少让我在目前的实际工作中取得了一些进展:
" 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>
仅GUI模式的设置
:尝试模拟其工作方式,但在某些计算机上,它不会选择可用字体
“设置guifont=-dt接口\user-medium-r-normal-*-*-100-*-*-m-*-iso8859-1,解放\Mono\8
设g:MyFontPre=''
设g:MyFontPost=''
设g:MyFontSize='8'
如果有(“gui_正在运行”)
如果(匹配(主机名(),'server5-1..')>=0)
设g:MyFontSize='10'
设g:MyFontPre='-dt接口\user-medium-r-normal-*-*-'
设g:MyFontPost='0-*-*-m-*-iso8859-1'
elseif(匹配(主机名(),'server5-3..')>=0)
设g:MyFontPre='releasion\Mono'
设g:MyFontPost=''
其他的
“暂时保留默认值
恩迪夫
执行“set guifont=“.g:MyFontPre.”.g:MyFontSize.”.g:MyFontPost
恩迪夫
“字体大小快捷方式”
功能!ToggleMyFontSize()
如果(g:MyFontSize==12)
设g:MyFontSize=8
执行“set guifont=“.g:MyFontPre.”.g:MyFontSize.”.g:MyFontPost
elseif(g:MyFontSize==8)
设g:MyFontSize=10
执行“set guifont=“.g:MyFontPre.”.g:MyFontSize.”.g:MyFontPost
elseif(g:MyFontSize==10)
设g:MyFontSize=12
执行“set guifont=“.g:MyFontPre.”.g:MyFontSize.”.g:MyFontPost
恩迪夫
端功能
nnoremap:调用ToggleMyFontSize()
不是问题的直接解决方案,但您可以使用
hostname()
和条件语句来选择您想要的字体:
if hostname() == 'home-pc'
set guifont=...
elseif hostname() == 'work-pc'
set guifont=...
else
set guifont=...
endif
您还可以将所有常用设置放置在
.vimrc
中,并在特定于机器的.gvimrc
中选择字体(如果您是Windows用户,请使用\u vimrc
和\u gvimrc
)
我知道这不是对你问题的直接回答,但我觉得指出这一点是值得的 如果使用逗号对您不起作用,如何允许优雅的字体降级?此技巧也可用于其他“设置”选项
silent! set guifont=Font\ One:h8
if &guifont != 'Font One:h8'
set guifont=Font\ Two:h8
endif
仅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"}
因此,该机器上可用的另一个vim版本是7.0,它提供了与我之前在7.2中看到的相同的行为。。。很奇怪。这一定是关于如何为特定机器编译的东西?!?!还有其他人有什么想法吗?与此同时,我正在根据“太多php”的建议开发一个解决方案。我认为我的IT部门也应该使用字体服务器xfs,以便所有机器都有相同的可用字体。我已经为他们登记了一张票。他们在这里谈论xfs:另外,如果你想使用正则表达式,你可以这样做:如果hostname()=~'server5-1..最好将解决方案发布为下面的答案,而不是对原始问题的编辑。这样,它可以像其他解决方案一样受到上/下投票的影响;我是通过我的
~/.vimrc
中的source~/local/.vimrc
来实现的。对不起,这只是。不需要。重点应该是在您不太了解或没有时间完全按照您的需要配置的机器上轻松设置Vim。
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"}