Как легко проверить guifont в vimrc?
У меня есть много разных машин, в которые я вхожу, и ни у кого из них нет обычных шрифтов. Таким образом, я хотел бы иметь возможность получить первое предпочтение шрифта, но если он не существует на компьютере, используйте другой и т.д. Кто-нибудь сделал это раньше?
...
Итак, после повторного чтения справки по 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>
Ответы
Ответ 1
Неправильное решение вашей проблемы, но вы можете использовать hostname()
и условный оператор для выбора нужного шрифта:
if hostname() == 'home-pc'
set guifont=...
elseif hostname() == 'work-pc'
set guifont=...
else
set guifont=...
endif
Ответ 2
Если использование запятых не работает для вас, как насчет этого, чтобы позволить грациозную деградацию шрифтов? Этот трюк можно использовать и для других опций 'set'.
silent! set guifont=Font\ One:h8
if &guifont != 'Font One:h8'
set guifont=Font\ Two:h8
endif
Ответ 3
Вы также можете разместить все свои общие настройки в .vimrc
и выбрать шрифт в конкретном для машины .gvimrc
(если вы пользователь Windows, вместо этого используйте _vimrc
и _gvimrc
).
Я знаю, что это не прямой ответ на ваш вопрос, но я счел нужным указать на это.:)
Ответ 4
Только решение 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
Просто замените имя и размер шрифта в словаре тем, который вы хотите - i.e,
let font = {"name" : "DejaVuSansMono", "size" : "12"}