Vinculação Shift-Enter para inserir uma nova linha sem avaliar a expressão atual

Vinculação Shift-Enter para inserir uma nova linha sem avaliar a expressão atual

Tento vincular Shift-Enterpara inserir uma nova linha sem avaliar a expressão atual no terminal e nos modos repl. Lendo através doArchWiki, tentei definir isso em meu ~/.Xmodmaparquivo e recarregar ~/.Xmodmapcom xmodmap ~/.Xmodmap. Isso, entretanto, não funciona. Aqui está minha configuração detalhada:

conteúdo de:

    ~/.Xmodmap:
    keysym Return = Return Linefeed

~/.Xmodmaprecebe recursos automaticamente ao fazer login, definindo:

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

    fi

no meu ~/.xinitrc.

Informações adicionais relevantes:

(1) Ativei o modo de edição vi em my ~/.bashrce my ~/.inputrc. No entanto, os resultados não diferiram ao retirar essas opções.

(2) O uso keysym Return = Return Linefeedfoi sugeridoaqui.* Outros métodos também não funcionaram.

(3) Meu $TERMestá definido como xterm-256color.

Obrigado por qualquer ajuda!


*Atualização: A solução sugerida nesta página (se ainda for encontrada) não pode funcionar no caso específico discutido lá, pois a linguagem de programação está usando sua própria implementação de repl. Portanto, isso não tem qualquer influência no caso em questão.

Responder1

A resposta fácil é digitar Ctrl+ V Ctrl+ J.


Vincular Shift+ Returna Linefeedfaz com que envie ^J= control-J = \n= \012(em vez de ^M= \r= \015). Isso é apenas parte do que você precisa fazer: por padrão, ambas as chaves estão vinculadas à execução da linha atual no bash. Você precisa alterar a ligação de ^J para .inputrcinserir uma nova linha literal ( ^V= \026):

"\n": self-insert

Como alternativa, vincule a chave em seu .bashrc:

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

Alterar Shift+ Returnpara Linefeedpode ter efeitos colaterais indesejáveis ​​- geralmente é útil ter Shift+ Returnequivalente a Returnpara que você possa digitar Returnrapidamente, mesmo quando Shiftestiver inativo. Eu recomendaria alterar Ctrl+ Returnpara inserir um avanço de linha no XTerm. Você pode fazer isso em seu ~/.Xresources(ou onde quer que você coloque seus recursos X):

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

informação relacionada