Что может вызвать странные символы в Vim?


13

У меня действительно странная проблема в Vim, использующем плагин дерева NERD, где, как вы можете видеть на картинке, персонажи появляются очень странно. Там, где есть Ахат, ~ V 3/4 должно быть | -. Я установил для LANG значение en_US и LC_ALL для en_US (в Arch linux), и я использую шрифт Anonymous Pro, хотя переключение шрифта не имеет значения.

очень странно


Это похоже на проблему с кодировкой. Ваш плагин использует кодировку UTF-8, в то время как ваш gvim, вероятно, ожидает latin1. Извините, у меня нет более полного решения на данный момент. Вы можете попробовать выполнить " :set fenc=utf-8", но это не является долгосрочным решением.
garyjohn

1
Это действительно похоже на проблему кодировки символов. Я предполагаю, что данные содержат ├ (КОРОБКА ЧЕРТЕЖЕЙ СВЕТОВОЙ ВЕРТИКАЛЬНОЙ И ПРАВОЙ, U + 251C), что составляет 0xE2 0x94 0x9C в UTF-8. Интерпретируется как ISO-8859-1, первый байт - â, остальные - управляющие коды. Все остальное неясно, но форсирование интерпретации данных в UTF-8 должно пролить свет на проблему.
Юкка К. Корпела

Хорошо, да, рисунок на коробке имеет смысл, я всегда думал, что это просто полоса и тире. Anonymous Pro имеет поле для рисования символов.
Таннер

@ Tom Wijsman Я не уверен, что вы изменили в названии. Ваше редактирование говорит, что вы редактировали заголовок, но ничего не изменилось.
Таннер

@Tanner: я добавил «Что может вызвать» и знак вопроса.
Тамара Вийсман

Ответы:



6

Я решил проблему. Что я сделал, чтобы решить это:

  • Edited /etc/locale.gen , чтобы LC_ALL="en_US.UTF-8"вместоLC_ALL="en_US"
  • Побежал locale-genкак корень
  • Побежал locale -a, это показало en_US.UTF-8; Тем не менее, localeпоказало LC_ALLвсе еще en_US, потом я вспомнил, что я экспортировал LC_ALLв мою .bashrcпоследнюю ночь, пытаясь это исправить, поэтому я изменил свой LANGиLC_ALL кen_US.UTF-8
  • Перезагрузил терминал, запустил gvim, успехов! Странно, однако, что теперь используются символы треугольной стрелки вместо прямоугольных. Заставляет меня думать, что он использует коробочные для ISO-8859 и треугольники для UTF-8, возможно, что наводит меня на мысль, что у меня могут быть проблемы в будущем в какой-то другой программе. Я исправлю это, когда дело доходит до этого.

1
Этого было недостаточно, чтобы исправить это для меня; Мне также пришлось перекомпилировать vim с помощью multi_byte. Работает нормально сейчас.
chris.ritsen

Я проверю, скомпилирована ли моя версия vim с multi_byte сегодня вечером.
Таннер

LC_ALL="en_US.UTF-8мне было достаточно
Якуб М.

3

Может быть, это не стоит взломать, но, кажется, это сработало для меня.

Я изменил строку в NERDTree.vim:

call s:initVariable("g:NERDTreeDirArrows", s:running_windows) 

(это было !s:running_windowsраньше)

Сейчас я не вижу какой-либо причудливый +символ, но по крайней мере прыжковые каталоги работают изнутри vim. Я на Солярисе и не думаю, что у меня есть root-доступ.


1

Моим изменением было убрать логическое отрицание (символ!). Вот git diff:

~ / .vim / plugged / nerdtree / plugin] $ git diff NERD_tree.vim
diff --git a / plugin / NERD_tree.vim b / plugin / NERD_tree.vim
индекс bbcc55f..6342b6c 100644
--- a / plugin / NERD_tree.vim
+++ b / plugin / NERD_tree.vim
@@ -66,7 +66,7 @@ call s: initVariable ("g: NERDTreeShowHidden", 0)
 вызов s: initVariable ("g: NERDTreeShowLineNumbers", 0)
 call s: initVariable ("g: NERDTreeSortDirs", 1)

-if! nerdtree # runningWindows ()
+ если nerdtree # runningWindows ()
     вызов s: initVariable ("g: NERDTreeDirArrowExpandable", "--junk1-here--")
     вызов s: initVariable ("g: NERDTreeDirArrowCollapsible", "--junk2-here--")
 еще

1

Явное добавление значений к следующим двум переменным в .vimrc (vim config) решило проблему для меня:

let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'

Это должны быть значения по умолчанию, но по какой-то причине они не были установлены для меня в Ubuntu / Vim.


1

Если ваш vimrc меняется guicursor, попробуйте удалить эту строку. Другие переменные, которые, кажется, вызывают / предотвращают это:

set guicursor=в vimrc
set t_Co=в vimrc
export TERM=xterm-256colorв оболочке


1

В моем случае проблема была связана с проблемой локали. Решение:

  1. Установить значение:

    export LC_ALL = "en_US.UTF-8"

  2. Запустите vim:

    напор

Смотрите подробности для локали проблемы здесь:

Невозможно установить LC_CTYPE в качестве локали по умолчанию: нет такого файла или каталога

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.