Intereting Posts
Как удалить первый экземпляр чего-либо в файле с awk? Как настроить маршрутизатор linux, чтобы клиенты могли использовать максимальную пропускную способность? Активировать Wi-Fi при запуске 3 запуска Есть ли способ ограничить диапазон шаблона диапазона в awk? Принцип наименьшей привилегии: действительно ли помощнику Authbind нужен root setuid или он может работать с cap_net_bind_services? Как сделать Ubuntu Linux 16.10 системным монитором?% Загрузка процессора согласуется с ps или top для процесса Firefox на четырехъядерном процессоре? RHEL – выключение заблокированной системы Как развернуть программы на нескольких машинах Истинное удаление столбца, не выбирая все столбцы, которые вы хотите scp без замены существующих файлов в месте назначения sbuild schroot не работает Безопасное управление системными / локальными / проектными пакетами Python? помогите с этой командой, не знаете, что она делает? Перекрестные запросы от VLAN в dnsmasq Conky: round $ {top cpu 1}

Отображения Alt для vim в urxvt

Мои сопоставления, содержащие Alt , не работают в vim при использовании в urxvt . Они отлично работают в gvim . Пример такого отображения

 map <silent> <Ah> <Cw>< 

В режиме вставки, когда я набираю Alt-h , печатается только h . Как мне настроить urxvt таким образом, чтобы отображения, содержащие Alt работали в vim? Я использую Ubuntu.

К сожалению, я устанавливаю свой модификатор как супер в urxvt. Вот почему ни одно из решений не работало для меня. Убедитесь, что вы установили модификатор как Alt, чтобы получить предлагаемые решения.

Когда вы создаете сопоставление <Ax> в Vim, когда x является печатным символом (т. Е. Не курсором или клавишей со стрелкой), он сообщает Vim ожидать, что символ с 8-м / высоким битом установлен (aka, добавьте 128 к значению ASCII ).

В вашем примере <Ah> означает, что Vim вызывает сопоставление при вводе è. Значение ASCII h равно 104 (двоичный 01101000), и когда вы устанавливаете 8-й бит этого числа, вы получаете значение ASCII от 232 (двоичный код 11101000).

Что происходит в urxvt и многих других терминалах, так это то, что клавиша Alt настроена на отправку символа, введенного с префиксом Escape, вместо «добавления 128». В этом случае семя Vim <Esc>h вместо è, поэтому отображение не запускается.

Это дает вам два варианта: переконфигурируйте свой терминал, чтобы сделать что-то другое с помощью модификатора Alt или добавьте больше сопоставлений в Vim с помощью <Esc>x в дополнение к <Ax> .

Если вам нужно ввести текст без ASCII, попробуйте изменить свои сопоставления в vim от <Ax> до <Esc>x .

Если вы вводите только текст ASCII, вы можете попробовать запустить urxvt с параметром --meta8 , а в vim set termencoding=latin1 .

Вы также можете попробовать другие решения:

http://vim.wikia.com/wiki/Get_Alt_key_to_work_in_terminal

Я бесстыдно отправляю ответ, заданный u / jbaumy93 на reddit .

Вот что я сейчас использую,

В ~/.Xresources я не устанавливаю URxvt.meta8: true когда кодировка ломается, когда я ее устанавливаю. Если я использую set termencoding=latin , он set termencoding=latin . Я решил использовать сопоставления Esc поскольку @graywh разместил и использовал ответ, связанный выше, чтобы сделать это.

Также убедитесь, что модификатор установлен как Alt в urxvt . Я использовал super как модификатор, и ни один из опубликованных решений не работал.

Вот фрагмент моего vimrc

 nnoremap <silent> <Ah> <Cw>< nnoremap <silent> <Ak> <Cw>- nnoremap <silent> <Aj> <Cw>+ nnoremap <silent> <Al> <Cw>> function! Altmap(char) if has('gui_running') | return ' <A-'.a:char.'> ' | else | return ' <Esc>'.a:char.' '|endif endfunction if $TERM == 'rxvt-unicode-256color'&&!has('gui_running') set ttimeoutlen=10 augroup FastEscape autocmd! autocmd InsertEnter * set timeoutlen=400 autocmd InsertLeave * set timeoutlen=2000 augroup END execute 'nnoremap <silent>'.Altmap('h').'<Cw><' execute 'nnoremap <silent>'.Altmap('k').'<Cw>-' execute 'nnoremap <silent>'.Altmap('j').'<Cw>+' execute 'nnoremap <silent>'.Altmap('l').'<Cw>>' endif