Как легко проверить на Guifont в Vimrc? - PullRequest
11 голосов
/ 18 июня 2009

У меня много разных машин, в которые я вхожу, и ни у одной из них нет приличных общих шрифтов. Итак, я хотел бы иметь возможность иметь свой первый предпочтение для шрифта, но если его нет на компьютере, используйте другой и так далее. Кто-нибудь делал это раньше?

...

Так что после перечитывания справки по 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>

Ответы [ 4 ]

7 голосов
/ 12 октября 2012

Если использование запятых не работает для вас, как насчет этого, чтобы разрешить постепенное ухудшение шрифта? Этот прием можно использовать и для других опций 'set'.

silent! set guifont=Font\ One:h8
if &guifont != 'Font One:h8'
    set guifont=Font\ Two:h8
endif
5 голосов
/ 18 июня 2009

Не является прямым решением вашей проблемы, но вы можете использовать hostname() и условный оператор, чтобы выбрать нужный шрифт:

  if hostname() == 'home-pc'
      set guifont=...
  elseif hostname() == 'work-pc'
      set guifont=...
  else
      set guifont=...
  endif
1 голос
/ 29 июня 2011

Вы также можете поместить все свои общие настройки в .vimrc и выбрать шрифт для машинного .gvimrc (если вы пользователь Windows, вместо него используйте _vimrc и _gvimrc).

Я знаю, что это не прямой ответ на ваш вопрос, но я нашел, что стоит потратить на это внимание. :)

0 голосов
/ 28 декабря 2014

Решение только для 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"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...