在.vimrc文件中设置gvim字体

197

我在Windows 7上使用gVim 7.2。我可以在菜单中将GUI字体设置为Consolas 10(字体大小)。我试图在.vimrc文件中设置如下:

set guifont=Consolas\ 10

但是它不起作用。有人知道如何设置吗?


在Windows 10上,Vim 8.2的表现更佳,如果将这些设置放入~/_gvimrc中,否则,如果编辑文件~/_vimrc,插件将停止工作。例如,语法高亮功能将停止工作。 - Yuri Pozniak
10个回答

338

我使用以下字体(在 Windows 上使用 Consolas 大小为 11,在 Mac OS X 上使用 Menlo Regular 大小为 14,在其他地方使用 Inconsolata 大小为 12):

if has("gui_running")
  if has("gui_gtk2")
    set guifont=Inconsolata\ 12
  elseif has("gui_macvim")
    set guifont=Menlo\ Regular:h14
  elseif has("gui_win32")
    set guifont=Consolas:h11:cANSI
  endif
endif

编辑:顺便说一下,你可以看看Coding Horror的编程字体博客文章

编辑²:添加了MacVim。


18
所以基本上对于Windows,您只需要将set guifont=Consolas:h11:cANSI添加到~/.vimrc文件中。 - Jasdeep Khalsa
10
最好从.gvimrc中执行此操作。 - Alexei Averchenko
1
这是一篇更新的编程字体博客文章,来自 Codding Horror(编程恐惧症)网站:http://blog.codinghorror.com/revisiting-programming-fonts/ - fratrik
2
使用 GTK 3 的 Vim 8,您还需要检查 "gui_gtk3" - Ruud
4
你能否解释一下为什么要使用cANSI,以及它是否必要? - anishpatel
显示剩余2条评论

93

尝试从菜单中设置字体,然后再输入

:set guifont?

这应该向您显示Vim设置的选项字符串。您需要转义任何空格。


47
我试图在 ".vimrc" 文件中设置如下内容:
对于 GUI 特定设置,请使用 ".gvimrc",而不是 ".vimrc",在 Windows 上,它是 "$HOME\_gvimrc" 或 "$VIM\_gvimrc"。
查看详细信息请使用 ":help .gvimrc"。本质上,在启动时,VIM 会读取 ".vimrc"。之后,如果激活了图形用户界面(GUI),它还会读取 ".gvimrc"。也就是说,所有 VIM 的一般设置应该保留在 ".vimrc" 中,所有 GUI 特定的事情则在 ".gvimrc" 中。(但如果你不使用控制台 VIM,则可以忘记 ".vimrc"。)
语法有误。在 ":set guifont = *" 之后,您可以始终使用 ":set guifont?" 检查字体的正确语法。VIM Windows 语法是 ":set guifont = Consolas:h10"。虽然在 :help win32-faq 中提到了这一点,但没有精确说明。

45
  1. 启动图形化vim会话。
  2. 输入:e $MYGVIMRCEnter以打开配置文件。
  3. 使用图形化字体选择对话框选择字体。
  4. 输入:set guifont=TabEnter
  5. 输入G o在文件末尾开始新行。
  6. 按下Ctrl+R,然后输入:来执行ex模式命令。

第6步中的命令将插入特殊寄存器:的内容,该寄存器包含最后一次使用的ex模式命令。此处的命令来自第4步,由于使用了GUI对话框的选项卡补全,因此具有正确格式的字体名称。


我猜那是因为使用图形字体选择对话框会导致运行命令,就像 gvim 中的大多数(全部?)类似的 GUI 和菜单项一样。有时你可以看到它们的回显。 - Evgeni Sergeev
1
我确信菜单会运行一个命令,但这在这里并不重要;图形界面在这里使用的唯一效果是设置 guifont 选项,而不是运行任何特定的命令。 - qqx
我必须在第6步中输入“:p”才能获得最后一个ex模式命令。请参见此答案 - erik
@erik 这是一个正常模式命令,在第5步会将您置于插入模式,因此不应该在那里起作用。它也不能确保粘贴的命令位于单独的一行上。 - qqx
@qqx:好的,是我自己的问题。我不知道怎么退出插入模式。你说得对,这是一个很好的解决方案! - erik
该方法的额外好处是禁止字体名称拼写错误。 - mgriebe

12

对于Windows,请执行以下操作:

  1. 从“gvim.exec”的“Edit-Select Font…”菜单中记录字体名称和字体大小。
  2. 然后执行:e $MYGVIMRC
  3. 搜索“guifont”字符串并将其更改为 set guifont=<记下的字体名称>:h<字体大小>
  4. 保存文件并退出。
  5. 下次执行gvim.exec时,您将看到效果。

10

虽然这是一个旧的帖子,但因为我在解决类似问题时遇到了它,所以我想添加一条评论;这可能会帮助其他人找到这里:

反斜线字符用于忽略下一个字符;在我的gvimrc中将其添加到字体名称后,它就起作用了;我正在使用不喜欢空格的GNU/Linux机器。我怀疑最初的帖子是由于在windows机器上使用反斜杠而出现的错误。

例如:

:set guifont?  ## From gvim command, would give the following:

设置GUI字体为DejaVu Sans Mono for Powerline,大小为11。

而我需要将这行代码添加到gvimrc文件中使其被读取:

set guifont=DejaVu\ Sans\ Mono\ for\ Powerline\ 11

2

当我尝试执行以下操作:

set guifont=Consolas:h16

我得到了如下警告信息:警告:字体“Consolas”报告固定间距度量不良

以下是解决方法,可以使警告消失。
autocmd vimenter * GuiFont! Consolas:h16

顺便提一下,如果你想使用鼠标滚轮来控制字体大小,那么可以添加以下代码:
function! AdjustFontSize(amount)
    let s:font_size = s:font_size + a:amount
    :execute "GuiFont! Consolas:h" . s:font_size
endfunction

noremap <C-ScrollWheelUp> :call AdjustFontSize(1)<CR>
noremap <C-ScrollWheelDown> :call AdjustFontSize(-1)<CR>

如果您想选择字体,可以进行设置。
set guifont=*

将会弹出一个字体请求器,在那里您可以选择您想要的字体。

在这里输入图片描述


1

我最终不得不做

:set guifont=Courier:h10:cANSI

0

Ubuntu 14.04 LTS

:/$ cd etc/vim/
:/etc/vim$ sudo gvim gvimrc

if - endif 块之后,输入

set guifont=Neep\ 10

保存文件(:wq!)。这里“Neep”(您可以自行选择)是字体样式,“10”是字体大小。然后再次构建字体缓存。
:/etc/vim$ fc-cache -f -v

您想要的字体将被设置为gvim。


0

Windows 11用户

在上面的示例中找到set guifont= XXX:xx:xx

进入C:\Program Files (x86)\Vim并使用ADMIN权限编辑_vimrc文件,在该文件中设置guifont代码

例如

" Vim with all enhancements
source $VIMRUNTIME/vimrc_example.vim

" Use the internal diff if available.
" Otherwise use the special 'diffexpr' for Windows.


set guifont=Cascadia_Mono:h14:cANSI:qDRAFT


if &diffopt !~# 'internal'
  set diffexpr=MyDiff()
endif
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg1 = substitute(arg1, '!', '\!', 'g')
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg2 = substitute(arg2, '!', '\!', 'g')
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let arg3 = substitute(arg3, '!', '\!', 'g')
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      if empty(&shellxquote)
        let l:shxq_sav = ''
        set shellxquote&
      endif
      let cmd = '"' . $VIMRUNTIME . '\diff"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  let cmd = substitute(cmd, '!', '\!', 'g')
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
  if exists('l:shxq_sav')
    let &shellxquote=l:shxq_sav
  endif
endfunction


保存并重新启动

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接