以编程方式知道当前字体是否具有电力线补丁

时间:2016-03-16 12:58:05

标签: vim fonts zsh fish

我将vim与vim-airline一起使用,patched fonts可以使用vim-airline来获得更好的效果。

fish

我也使用{{3}} shell(如果你想在这里阅读zsh,因为它等同于分析),主题也使用修补字体。

我在线保存我的dotfiles,并在不同的系统中使用它们。但在其中一些我没有修补字体。 我真的很想拥有通用的dotfiles,例如,如果当前的字体未修补,则不使用需要修补字体的主题。同样在我的vimrc中,由于这个原因,我禁用了vim-airline的修补字符。

有没有办法以编程方式知道当前使用的字体是否是经过修补的字体,以便可以编写适合所有情况的通用dotfiles?

2 个答案:

答案 0 :(得分:3)

在Vim中,您需要直接询问终端仿真器当前使用的字体。确切的方法肯定会因终端和操作系统而异。如果可能的话。

如果您在所有系统上都拥有它,则可以使用lsof查找给定程序当前使用的字体:

$ lsof | grep iTerm | grep '\.\(otf\|ttf\)'

在GVim / MacVim中,您可以检查当前字体名称是否与某些模式匹配:

if &guifont =~? 'powerline'
    " do something
else
    " do something else
endif

假设您的字体文件名包含该模式。

但是不可能保证实际的电话线字体"其文件名中包含powerline,并且同样无法保证其文件名中powerline的字体是实际的" powerline字体"。

检查字体中某处Powerline字符串的存在会更安全:

$ xxd ~/Downloads/FuraMono-Bold\ Powerline.otf | grep Powerline

但那是假设:

  • xxd可用,
  • 您可以从终端模拟器或GVim / MacVim收集的任何信息中获取实际字体的路径。

这是一个很多的假设,似乎很多工作都像一个肤浅的字体" powerline字体"。

答案 1 :(得分:0)

您可以用另一种方法来执行此操作,并且仅对.vimrc中的已知计算机启用Powerline字体。

let hostname = substitute(system('hostname'), '\n', '', '')
let patched_font_hosts = ['host1', 'host2', 'host3']   " List of know patched hosts
if(index(patched_font_hosts, hostname) >= 0)
  let g:airline_powerline_fonts = 1
endif

更容易知道您已修补了哪些主机,如果列表不是最新的,这也不是真正的问题。