Привязка Shift-Enter для вставки новой строки без вычисления текущего выражения

Привязка Shift-Enter для вставки новой строки без вычисления текущего выражения

Я пытаюсь выполнить привязку Shift-Enterдля вставки новой строки без оценки текущего выражения в терминале и в режимах repl. ЧитаяАрхВики, я попробовал установить это в своем ~/.Xmodmapфайле и перезагрузить ~/.Xmodmapс помощью xmodmap ~/.Xmodmap. Однако это не работает. Вот моя подробная настройка:

содержание:

    ~/.Xmodmap:
    keysym Return = Return Linefeed

~/.Xmodmapавтоматически выделяется при входе в систему путем установки:

    if [ -s ~/.Xmodmap ]; then
        xmodmap ~/.Xmodmap

    fi

в моем ~/.xinitrc.

Дополнительная информация:

(1) Я включил режим редактирования vi в моем ~/.bashrcи моем ~/.inputrc. Однако, при отключении этих опций результаты не отличались.

(2) keysym Return = Return LinefeedБыло предложено использоватьздесь.* Другие методы тоже не сработали.

(3) Мой $TERMустановлен на xterm-256color.

Спасибо за любую помощь!


*Обновление: Решение, предложенное на этой странице (если его еще предстоит найти), не может работать в конкретном случае, обсуждаемом там, поскольку язык программирования использует собственную реализацию repl. Так что это не имеет никакого отношения к рассматриваемому случаю.

решение1

Самый простой ответ — набрать Ctrl+ V Ctrl+ J.


Привязка Shift+ Returnк Linefeedзаставляет его отправлять ^J= control-J = \n= \012(вместо ^M= \r= \015). Это только часть того, что вам нужно сделать: по умолчанию обе клавиши привязаны к выполнению текущей строки в bash. Вам нужно изменить привязку для ^J в вашем, .inputrcчтобы вставить буквальный ( ^V= \026) символ новой строки:

"\n": self-insert

В качестве альтернативы, привяжите ключ в вашем .bashrc:

bind -m vi-command '"\n": self-insert'
bind -m vi-insert '"\n": self-insert'

Изменение Shift+ Returnна Linefeedможет иметь нежелательные побочные эффекты — часто бывает полезно иметь эквивалент Shift+ , чтобы можно было быстро печатать, даже когда он нажат. Я бы рекомендовал вместо этого изменить + на вставку перевода строки в XTerm. Вы можете сделать это в вашем (или там, где вы размещаете свои ресурсы X):ReturnReturnReturnShiftCtrlReturn~/.Xresources

XTerm.vt100.translations: #override Ctrl<Key>Return: string("\012")

Связанный контент