Проблема с терминалом/iTerm2: команда отключения обратного поиска

У меня эта проблема с 10.9.

  1. cd на достаточно длинный путь, например,cd /Volumes/Storage/backup/long/path
  2. Введите умеренно длинную команду, например,curl -X GET http://localhost:8888
  3. ctrl+ R, типcurl
  4. ctrl+E

Отображаемая команда сдвинута далеко влево и оставляет пробелы справа следующим образом:

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

Это известный баг или только у меня?

Обратный поиск — это функция оболочки, а не терминала. Было бы полезно упомянуть, какую оболочку вы используете. bash? zsh? И чтобы ответить на вторую часть вашего вопроса: у меня не происходит zsh5.0.7 с использованием последней версии iTerm2 на 10.10.2. Редактирование начинается в конце команды, как и ожидалось.
Я использую bash3.2.53 и последнюю версию iTerm2.
bash3.2.57 работает, как и ожидалось, здесь. Он каждый раз помещает курсор на один символ после последнего символа в строке.
@IanC. вдохновил меня перейти на zsh, и я вполне доволен этим!
Мои dotfiles помогут вам быстро начать работу с zsh: github.com/ianchesal/dotfiles

Ответы (3)

Это ваше $PS1- оно не убежало должным образом. Вы должны экранировать все непечатаемые символы с помощью \[и \]. Например, если у вас есть

PS1='\e[32m\u \W\e[0m $ '

вы должны изменить его на

PS1='\[\e[32m\]\u \W\[\e[0m\] $ '

или ваш курсор будет отображаться далеко справа, потому что ваша оболочка считает, что ваше приглашение слишком длинное, и когда она повторно набирает команду, она не может ее найти. Раздражает, я знаю. В zshвам нужно использовать %{и %}IIRC.

И пока вы думаете о переходе на другую оболочку, я бы предложил fish . Это немного больше похоже на прыжок, но это держит меня в здравом уме.

Мой PS1, PS1='\[\e[0;33m\]\u\[\e[0m\]:\[\e[0;32m\]\w\[\e[0m\]\$ 'я не могу совсем, кажется, выбрать то, что не было сбежало.
Примечание: шелловать exportпеременные необязательно и нежелательно. Интерактивные вложенные оболочки будут запускать сценарий запуска и определять переменную, и, как правило, нежелательно, чтобы программы, запускаемые из оболочки, наследовали переменные, специфичные для оболочки.
Так рад, что нашел это - у меня была аналогичная проблема, когда обратный поиск + правки вставляли правки не в то место, и это исправление было именно тем решением!

Неудачный ответ: это только вы.

Мой bash:

bash-3.2$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.

А iTerm2 — последний релиз и ведет себя так, как положено: Ctrl-E при обратном поиске по истории ставит меня в конец строки, на символ после последнего символа в выделенной строке.

Это может быть что-то в вашей bashконфигурации, которая вызывает проблему. Вы можете отложить свои ~/.bash_profileфайлы и файлы ~/.bashrc` и попробовать Ctrl-R и Ctrl-E и посмотреть, станет ли все работать лучше. Если это так, замените свои настройки по одной и посмотрите, сможете ли вы определить виновника.

Изменение export TERM="xterm-color"to export TERM="xterm"в моем .bash_profileисправило проблему для меня.