2

В vim мы можем набрать Ctrl+v, затем Number в режиме вставки, чтобы вставить специальные символы. Это в основном используется для вставки управляющих символов. Но любые символы могут быть вставлены, если мы знаем номер ASCII. Например, набрав Ctrl+v, затем 1, 2, 6 вставьте символ «~». Смотрите: http://vimdoc.sourceforge.net/htmldoc/insert.html#ins-special-keys. Я бы хотел иметь такое же или похожее поведение с редактором zsh. Обратите внимание, я использую zsh в режиме vi, но я не думаю, что это имеет значение. Я обнаружил, что вставку ввода можно выполнить с помощью Ctrl+v, а затем Ctrl+j, см. Как вставить новую строку в редакторе строк ZSH? , Но как мне вставить тильду?

Мне это нужно, потому что я работаю с тупым клиентом citrix, с помощью которого я не могу набрать символ '~'.

1 ответ1

1

Три возможности (~ имеет код ASCII 126 или 176 в десятичной или восьмеричной записи, соответственно):

  • используйте синтаксис $'\OCT' , где OCT - это код ASCII в восьмеричной записи:

    $ echo foo$'\176'bar
    foo~bar
    
  • используйте подстановку команд с printf:

    $ echo foo$(printf "\176")bar
    foo~bar
    
  • используйте этот виджет zle, чтобы напоминать специальный ввод символов vi:

    insert-special-char() {
      LBUFFER+=$(printf "\x$(printf %x $NUMERIC)")
    }
    zle -N insert-special-char
    

    где я позаимствовал строку printf из расширения.

    Чтобы использовать этот виджет, свяжите его, например, с S в режиме командной строки zle (или с любым другим ключом, который вы не используете):

    bindkey -M vicmd "S" insert-special-char
    

    Затем введите ASCII-код (в десятичной записи), находясь в режиме команды zle vi-command, и нажмите S Затем вставляется специальный символ:

    ESC 1 2 6 S

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .