Отображение символа ► в строке состояния светлой линии терминала Vim

Я работаю над SUSE Linux Enterprise Desktop 11 (x86_64) и использую Vim в терминале в качестве редактора. Недавно я установил плагин под названием lightline с сайта https://github.com/itchyny/lightline.vim. Плагин использует специальные символы, чтобы строка состояния выглядела так:

введите здесь описание изображения

Часть > полосы на самом деле имеет ► символ, окрашенный в квадрат рядом с ним. Проблема в том, что бар в моем случае выглядит так:

введите здесь описание изображения

Символ ► отображается некорректно, хотя установлена ​​кодировка UTF-8 и в системе установлены все необходимые шрифты (шрифты для powerline). В этом случае на терминале установлен шрифт Liberation Mono для Powerline.

Настройки Lightline в моем vimrc:

set encoding=utf-8
scriptencoding utf-8

let g:lightline = {
   \ 'colorscheme': 'wombat',
   \ 'separator': {'left': "\u25B6", 'right': ''},
   \ 'subseparator': { 'left': '', 'right': ''}
   \ }

Я также пытался скопировать символ ► следующим образом

let g:lightline = {
       \ 'colorscheme': 'wombat',
       \ 'separator': {'left': "►", 'right': ''},
       \ 'subseparator': { 'left': '', 'right': ''}
       \ }

Но проявляется так же.

Кроме того, существует проблема с символами ^ везде, где должны быть пробелы.

Есть ли какое-нибудь решение для этого?


person omegasbk    schedule 14.07.2015    source источник
comment
Попробуйте vi.stackexchange.com   -  person Alex K.    schedule 14.07.2015
comment
Ух ты! Не знал об этом, спасибо!!   -  person omegasbk    schedule 14.07.2015
comment
Кодирование, как правило, сложно, так как все части вашей установки (Vim, Terminal, ...) должны согласовать свои соответствующие настройки. Ваш set encoding=utf-8 выглядит хорошо для части Vim, поэтому я подозреваю проблему с настройками терминала. Что произойдет, если вы cat файл UTF-8? Что file ~/.vimrc говорит о кодировке этого файла?   -  person DevSolar    schedule 14.07.2015
comment
Хорошо, это немного странно :S Я поставил ► в свою конфигурацию лайтлайна вместо ▶ и изменил кодировку терминала на Windows-1250. После того, как я изменил кодировку терминала обратно на UTF-8, все заработало! Я попытался поймать .vimrc, и теперь он правильно показывает ►. Но символы ^ все еще там.   -  person omegasbk    schedule 14.07.2015
comment
О символе '^': посмотрите на переменную fillchars. Попробуйте что-то вроде этого: set fillchars+=stl:\ set fillchars+=stlnc:\ Для объяснения прочитайте :help fillchars.   -  person Alex Kroll    schedule 14.07.2015
comment
@omegasbk: Возможно, ваш терминал изначально не был настроен на UTF-8. Одна машина SLES 11, к которой у меня есть специальный доступ, использует 8859-1 в качестве кодировки по умолчанию в Терминале (фу!).   -  person DevSolar    schedule 14.07.2015
comment
@AlexKroll У меня проблемы с символом пробела. Я попытался с set fillchars+=stl:\ но символ пробела по какой-то причине игнорируется, и отображается символ ^ по умолчанию. Я также попытался поставить какой-нибудь другой символ, например *, и он отлично работает.   -  person omegasbk    schedule 15.07.2015
comment
@DevSolar Да, кажется, мой терминал использует другую кодировку по умолчанию. Первое, что необходимо сделать в этом случае, это изменить кодировку самостоятельно, хотя может показаться, что терминал имеет правильную кодировку по умолчанию.   -  person omegasbk    schedule 15.07.2015
comment
@omegasbk Поместите set fillchars+=stl:\ в .vimrc и перезапустите vim, он должен работать.   -  person Alex Kroll    schedule 15.07.2015
comment
@AlexKroll set fillchars+=stl:\ " this is a comment to prevent problems with the whitespace set fillchars+=stlnc:\ " this is a comment to prevent problems with the whitespace Я поместил это в свой vimrc, но все равно получаю символ ^. Если я поставлю set fillchars+=stl:\*, он отобразит *   -  person omegasbk    schedule 15.07.2015
comment
@omegasbk Очень странно. Я пробовал это set fillchars=stl:\ (без конкатенации), и это обновляет строку состояния с пробелами. set fillchars=stl:\ ,stlnc:\ ,vert:\|,fold:-,diff:-   -  person Alex Kroll    schedule 15.07.2015
comment
@AlexKroll Я нашел решение! Проблема объясняется в этой теме stackoverflow.com/questions/7223309/. Это говорит, что если stl и stlnc имеют одинаковые значения, они будут заменены на ^^^. Теперь это работает, когда я ставлю * для stlnc и пробел для stl.   -  person omegasbk    schedule 15.07.2015
comment


Ответы (2)


Ниже приведен мой my_configs.vim для лайтлайна, он отлично работает в моей системе Fedora 26.

let g:lightline = { 
       \ 'colorscheme': 'wombat',
       \ }

let g:lightline = { 
       \ 'colorscheme': 'wombat',
       \ 'active': {
       \   'left': [ ['mode', 'paste'],
       \             ['fugitive', 'readonly', 'filename', 'modified'] ],
       \   'right': [ [ 'lineinfo' ], ['percent'] ]
       \ },
       \ 'component': {
       \   'readonly': '%{&filetype=="help"?"":&readonly?"\ue0a2":""}',
       \   'modified': '%{&filetype=="help"?"":&modified?"\ue0a0":&modifiable?"":"-"}',
       \   'fugitive': '%{exists("*fugitive#head")?fugitive#head():""}'
       \ },
       \ 'component_visible_condition': {
       \   'readonly': '(&filetype!="help"&& &readonly)',
       \   'modified': '(&filetype!="help"&&(&modified||!&modifiable))',
       \   'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())'
       \ },
       \ 'separator': { 'left': "\ue0b0", 'right': "\ue0b2" },
       \ 'subseparator': { 'left': "\ue0b1", 'right': "\ue0b3" }
       \ }   "" This is comment: I fotgot this line in my last post, just added

Извините за мою ошибку, я только что исправил эту конфигурацию. Если вы установили хак-шрифт с https://github.com/chrissimpkins/Hack/releases и установите powerline-fonts с помощью команды «sudo dnf install powerline-fonts» в системе Fedora 26, вы, вероятно, захотите добавить следующие конфиги в ваш /etc/fonts/local.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <alias>
    <family>Hack</family>
    <prefer>
      <family>PowerlineSymbols</family>
    </prefer>
  </alias>
</fontconfig>
person Tomas    schedule 18.07.2017

Проблема была объяснена в этой теме stackoverflow.com/questions/7223309/. В нем говорится, что если stl и stlnc имеют одинаковые значения, они будут заменены на ^^^. Это работает, когда вы ставите * для stlnc и пробел для stl.

person omegasbk    schedule 28.02.2016