Вывод Rails Console прерывается при изменении

Здесь полностью отсутствует интуиция. Сначала я думал, что это происходит только при копировании и вставке кода из редактора. К сожалению, это более распространено. Единственное, что я делаю, это пытаюсь вставить больше кода где-нибудь в середине текущего ввода или изменить его.

Ожидаемое поведение:

  • Изменить ввод без побочных эффектов.

Что происходит на самом деле:

  • ОЧЕНЬ ЧАСТО при изменении ввода он перепутался.
  • Если это произойдет, каждое нажатие клавиши будет копировать и вставлять текущий ввод вместе с нажатым символом.

Важные примечания:

  • Кодировка установлена ​​​​на UTF-8 в терминале (ах)

  • Проблема сохраняется на разных эмуляторах (терминатор, гном-терминал)

  • Проблема сохраняется при использовании другой консоли времени выполнения Ruby (IRB, Pry).

  • Похоже, проблема связана со средой выполнения Ruby, а НЕ с оболочкой Linux (я думаю...)

Проблема возникает с:

  • С момента установки системы. Не появился на моем MacBook Air

Система:

  • ArchLinux, хотя коллега сообщил, что то же самое происходит на его MacBook Pro.

Как воспроизвести (у меня работает):

  • Консоль с открытыми рельсами
  • Введите пример кода: Shift.where(name: "som").where(name: "dom").where(name: "pom")
  • Переместите курсор, чтобы сначала изменить оператор where.
  • Изменить "сом" на "сом"
  • Должен увидеть, как он сломается
  • Нажмите случайную клавишу несколько раз, чтобы увидеть, как она ломается еще больше.

Изображения:

  • Хороший вклад

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

  • Теперь я перейду к первому оператору where, чтобы изменить «сом» на «SOM» в верхнем регистре.

  • Я в основном перемещался по своему курсору и нажимал SHIFT+S, SHIFT+O, SHIFT+M

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

Надеюсь, все понятно :-) Спасибо!


ИЗМЕНИТЬ 1:

  • Пробовал использовать zsh вместо bash, не помогло

  • Отключил spring gem, не помогло

РЕДАКТИРОВАТЬ 2:

Люди на Reddit предложили мне проверить, есть ли какие-либо предупреждения Ruby для чтения, например. "Readline не установлен". Ни один из них нигде не появляется. Также переустановил ruby ​​2.4.1, похоже, в моем случае это не проблема.

ИЗМЕНИТЬ 3:

Я не могу воспроизвести проблему в другом проекте Rails. Проблема появляется на Rails 5.1.1, в то время как 5.0.3 работает безупречно. Возможно ли, что причиной может быть сам Rails (или, скорее, одна из его жемчужин)?


person A Guy From Poor Country    schedule 06.07.2018    source источник
comment
Было бы полезно сообщить нам, какую оболочку вы используете. Я помню, что сталкивался с подобными проблемами (macos), но это не случалось уже давно - может быть, с тех пор, как я начал использовать zsh. Еще вопрос: как вы перемещаете курсор в указанное место? С помощью курсора мыши или клавиатуры (в последнем случае вы перемещаетесь по символам или используете какую-то механику перехода по всему слову, и может ли это иметь значение?)?   -  person Jay Schneider    schedule 06.07.2018
comment
Отлично работает в GNOME Terminal 3.18.3 на Ubuntu 16.04 LTS под управлением ruby ​​2.3.1p112 и Rails 4.2.1.   -  person jvillian    schedule 06.07.2018
comment
Вы используете драгоценный камень Spring? Известно, что в некоторых случаях это мешает выводу консоли. Раскомментируйте гем Spring из вашего Gemfile и завершите все фоновые задания Spring. Затем повторите тестирование.   -  person Casper    schedule 06.07.2018
comment
Вы также можете посмотреть, на какую эмуляцию терминала настроен ваш терминал. Я бы попробовал разные общие, чтобы увидеть, изменится ли поведение.   -  person Keith Bennett    schedule 08.07.2018
comment
@JaySchneider Я использую bash. И jump-full-word, и char дают одинаковый результат. Также в надежде установил zsh, но это не помогло :-( Такие же результаты на zsh.   -  person A Guy From Poor Country    schedule 09.07.2018
comment
@Casper Я отключил пружину. Не помогло.   -  person A Guy From Poor Country    schedule 09.07.2018
comment
Ребята! Как вы думаете, есть ли шанс, что рельсы сами по себе (или, скорее, одна из его частей) вызывают проблему? Я переключился на новый проект, над которым работаю, и кажется, что проблемы там нет. В это трудно поверить, я проведу еще несколько тестов и вернусь с результатами.   -  person A Guy From Poor Country    schedule 09.07.2018


Ответы (1)


У меня была очень похожая проблема, и я свел ее к своей окраске.

У меня было следующее в моем IRBRC:

class String

  def _colorize(color_code)
    "\e[#{color_code}m#{self}\e[0m"
  end

  def red
    _colorize(31)
  end

  def yellow
    _colorize(33)
  end
end

IRB.conf[:PROMPT][:MY_PROMPT] = {
  :AUTO_INDENT => true,            # enables auto-indent mode
  :PROMPT_I => "[ME]".red + " > ".yellow,               # normal prompt
  :PROMPT_S => "[ME]".red + "   ".yellow,               # prompt for continuated strings
  :PROMPT_C => "[ME]".red + " * ".yellow,               # prompt for continuated statement
  :RETURN =>   "[ME]".red + "=> ".yellow + "%s\n".red        # format to return value
}
IRB.conf[:PROMPT_MODE] = :MY_PROMPT

И когда я удалил .red и .yellow, все было просто отлично.

Я думаю, это потому, что мои символы раскраски, такие как \e[31m, считались длиной 5 символов вместо 0 символов.

Мое решение состояло в том, чтобы удалить мою окраску на данный момент. Надеюсь, кто-то предложит лучшее решение, чем это.

person BananaNeil    schedule 16.09.2019