LINUX.ORG.RU

vim: ремапинг backspace, прошу совет

 


0

2

Доброго дня, коллеги!

В режиме ввода сделал для удобства перемещение на один символ клавишами hjkl с зажатым control, например:

noremap! <C-H> <Left>

Проблема в том, что я хочу для сочетания shift+backspace оставить действие удаления предыдущего символа, но оно шлёт в редактор сочетание <C-H>, как я понимаю, в то время как <C-H> уже переназначено на сдвиг курсора влево.

Как сохранить ремап <C-H> и оставить удаление по <S-BS>?

★★
Ответ на: комментарий от mord0d

Спасибо, что посмотрел. Но я так и не понял, как это может разрешить вопрос мапов. На vim.fandom видел такую заметку

Your backspace key may be broken due to a bad mapping which has been loaded into Vim. This may be unintentional; Vim sees CTRL-H as a backspace (because CTRL-H is the ASCII code for a backspace), so you also cannot map anything to that.

но как-то не верится, что нельзя сделать по моему пожеланию. Прошу подтвердить, что придётся смириться с этим. Но ведь одиночный backspace продолжает корректно стирать, значит я что-то не вижу, просмотрел.

rmu ★★
() автор топика

У меня все три сочетания (C-H, BS, S-BS) выдают ^H (Ctrl+V <сочетание> в bash, insert или command-line mode в Vim). Но вообще это зависит от терминала.

xaizek ★★★★★
()
Ответ на: комментарий от rmu

Это нормально, оно ищёт первый аргумент буквально, а не после трансляции в коды терминала.

xaizek ★★★★★
()

Это, конечно, можно попробовать сделать в паре эмуляторов терминала (xterm, urxvt), но не стоит. В GVim скорее всего будет работать без костылей.

anonymous
()
Ответ на: комментарий от anonymous

Хотелось бы реализовать в привычном st.

rmu ★★
() автор топика

Боюсь, что ничего не выйдет. Я такое на Alt вешал, но там тоже не все так просто. В терминале Alt обычно посылает Escape, значит вешаем на <Esc>h и получаем задержки при нажатии собственно Esc. Решается настройкой таймаутов для режима вставки. По хорошему Alt использовать в виме конечно не стоит. В гвиме вот можно как угодно.

bread
()
Ответ на: комментарий от rmu

Мне было лень под вечер расписывать.

Vim юзает управляющие символы терминала. Backspace может возвращать ^H либо ^?. Удаление предыдущего символа в терминале обычно выполняется с помощью ^H, но зависит от терминала.

Например у @xaizek:

У меня все три сочетания (C-H, BS, S-BS) выдают ^H

А у меня ^H, ^? и ^? для <C-H>, <BS> и <S-BS> соответственно.

Можешь попробовать замапать ^? на <S-BS>, но зависит от терминала. Ну и вообще (ре)мапать <C-…> — плохая затея.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Разобрался!

Командами stty erase "^?" и stty erase "^H" вычислил то, что shift+backspace меняет своё поведение идентично сочетанию ctrl+H, а backspace шлёт независимо от этих команд одни и те же управляющие символы: "^?". Значит дело не в терминале, а в эмуляторе терминала st.

В настроечном файлике st config.def.h добавил такую строчку:

{ XK_BackSpace,     ShiftMask,      "\177",          0,    0},

но ситуация не изменилась. Тогда я удалил вот эту:

{ XK_BackSpace,     Mod1Mask,       "\033\177",      0,    0},

после чего всё стало так, как я и хотел: shift+backspace заработал, как и без шифта, а в vim мап noremap! <C-H> <Left> позволяет перемещать курсор в режиме ввода.

Единственное я так и не понял, чем провинилась строка:

{ XK_BackSpace,     Mod1Mask,       "\033\177",      0,    0},

? Ведь кнопка Mod1 у меня совершенно другая:

xmodmap -pm
mod1        Alt_L (0x40),  Meta_L (0xcd)

Спасибо, друзья, что заглянули в тему и подмогли.

rmu ★★
() автор топика
Ответ на: комментарий от rmu

неудобные

Да-да, и ты как настоящий осьминог юзаешь Control+.... А не имаксер ли ты? ☺

нелогичные

Эээ? о_О Можно пример нелогичного мапа?

У меня мапов на 95 строк

Перфекционист. ☺

Я обошёлся всего пятью мапами, один из которых юзался только при написании цветосхемы, ибо длинная портянка в одну строку.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

 Да-да, и ты как настоящий осьминог

Я две руки юзаю при печати :) Мизинчиком левой — ctrl, другую часть сочетаний то левой, то правой. Да и клавиатура у меня ремапнутая (напр., капс — ctrl, ctrl — esc).

Эээ? о_О Можно пример нелогичного мапа?

Сдвиги блоков бесят: разные сочетания для режимов норм и ввода, сами сочетания не объединены какой-то логикой — тупо запоминай. Это плохой дизайн. Скроллы. Прыжки курсора по скобкам и началам/концам абзацев.

На мой взгляд хороший дизайн выглядит так: если перемещения, то на одних и тех же клавишах и во всех режимах, а тип перемещения или его модуляция задаётся модификатором (благо, их много: альты, шифты, контроли и их сочетания).

rmu ★★
() автор топика
Ответ на: комментарий от mertvoprog

В Kakoune с этим из коробки получше.

vim интересен своим огромным сообществом, которое клепает без устали плагины день и ночь. В моём случае вим стал полноценным IDE. А у какуна только зачатки базы расширений, помещающиеся на одной странице.

rmu ★★
() автор топика
Ответ на: комментарий от rmu

У меня мапов на 95 строк :D Стандартные мапы совсем не нравятся: неудобные, нелогичные.

Ничего, все через это проходят. У меня был огромный vimrc на тыщу строк, который с годами таял и усыхал. Сейчас устаканился в районе 300 строк. Всё еще многовато, но там настройки плагинов в основном.

bread
()
Ответ на: комментарий от rmu

Да и клавиатура у меня ремапнутая (напр., капс — ctrl, ctrl — esc).

Норкомания! ☺

Но у меня норкоманнее! =P

На мой взгляд хороший дизайн выглядит так: если перемещения, то на одних и тех же клавишах и во всех режимах, а тип перемещения или его модуляция задаётся модификатором (благо, их много: альты, шифты, контроли и их сочетания).

Чем больше одновременно нажатых кнопок требуется, тем реже должно использоваться такое сочетание, ящитаю. Ты задумывался почему мы пишем одну заглавную букву в начале предложения через Shift, а остальной текст — без модификаторов? ^_~

mord0d ★★★★★
()
Ответ на: комментарий от bread

Ничего, все через это проходят.

:D согласен на 100%, именно так это и работает. Но пока мне удобнее настроить на интуитивное управление, чем запоминать 100500 бессвязных сочетаний. И всё из-за плагинов, альтернативы нет.

rmu ★★
() автор топика
Ответ на: комментарий от mord0d

Но у меня норкоманнее! =P

Ну и в чём наркомания? Если тебе так удобно, какие вопросы? Значит и все сочетания в других прогах смещаются по твоей раскладке. Единственное, что удивило — наличие Compose. Я как-то до неё никак не дойду, даже не знаю как оно работает. Этим вообще кто-то пользуется кроме тебя?

rmu ★★
() автор топика
Ответ на: комментарий от mord0d

Чем больше одновременно нажатых кнопок требуется

Один модификатор = одна модуляция поведения. Несложно, правда?

rmu ★★
() автор топика
Ответ на: комментарий от rmu

Этим вообще кто-то пользуется кроме тебя?

Да куча народу, просто никто не пытается пропихнуть (точнее вернуть, ибо оно раньше хардварным было, сейчас костыли программные) это в массы. Если ты пишешь только на английском и/или русском и/или других языках где диактрика в принципе не используется, то тебе оно и не надо, наверное.

Иногда (очень часто, на самом деле) нужно написать какое-нибудь имя (Michał, Ülari), название (Flëur, Caïna) или ещё что-нибудь (“Hvað er það?”). Не добавлять же мне кучу разных раскладок для этого? Переключение между кучей раскладок — это всегда боль.

Чем больше одновременно нажатых кнопок требуется

Один модификатор = одна модуляция поведения. Несложно, правда?

Я это к тому что чем больше одновременно задействовано пальцев, тем сложнее выворачивать руки, тем чаще они болят. Лично я настроил всё так, чтобы одновременно более двух пальцев одной руки задействовано не было.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Диакритику не употребляю. Наверно, когда с ней сталкиваешься, Compose сам собой появляется среди инструментов.

rmu ★★
() автор топика
Ответ на: комментарий от rmu

Наверно, когда с ней сталкиваешься, Compose сам собой появляется среди инструментов.

Да оно в принципе и не мешает. Целую кнопку занимает, разве что.

mord0d ★★★★★
()
Ответ на: комментарий от bread

все через это проходят

4.2, Мы вот как сидели на почти ванильном Vim 6 лет назад, так и сидим ;) И уж точно ничего не ремапали, разве что пытались ремапать кириллицу на латиницу в normal mode, но быстро бросили это дело из-за неразрешимых конфликтов в районе ,./?

mertvoprog
()
Ответ на: комментарий от mertvoprog

Еще и без плагинов небось? У меня вот штук 30 плагинов сторонних и дюжина самописных микроплагинчиков, чтобы хоть как-то можно было кодить в нём. Как бы единственное преимущество это скриптование и возможность всё перенастроить.

bread
()
Ответ на: комментарий от bread

В смысле не работает? УМВР для луа, пистона, раста, си и крестов. Зачем бы вообще нужен был вим, если не лсп? С джетбрэинс слез только потому, что лсп довели в вим до ума.

rmu ★★
() автор топика
Ответ на: комментарий от bread

В этом притягательность вима: собрать IDE «по кирпичикам», только из того, чем пользуюсь.

rmu ★★
() автор топика
Ответ на: комментарий от bread

Еще и без плагинов небось?

Ну какие-то стоят, но половину поставили и забыли, или снесли/поотключали (deoplete, например, ибо дюжеть запуск затормаживает).

@bq:20:17:54:/tmp/dl$ ls -l ~/.vim/bundle/
итого 88
drwxrwxrwx 1 root root 4096 апр 22  2018 ctrlp.vim
drwxrwxrwx 1 root root 4096 дек 10  2018 deoplete.nvim~
drwxrwxrwx 1 root root 4096 янв  5  2019 editorconfig-vim
drwxrwxrwx 1 root root 4096 июл 16  2015 emmet-vim
drwxrwxrwx 1 root root 4096 мар 17  2019 kotlin-vim
drwxrwxrwx 1 root root 4096 сен 26  2015 minibufexpl.vim
drwxrwxrwx 1 root root 4096 дек 10  2018 nvim-yarp
drwxrwxrwx 1 root root 4096 июл 26  2019 scvim
drwxrwxrwx 1 root root 4096 фев 19  2015 syntastic
drwxrwxrwx 1 root root 4096 дек 10  2018 tagbar
drwxrwxrwx 1 root root 4096 апр 27  2019 tern_for_vim
drwxrwxrwx 1 root root 4096 окт  1  2016 vim-after-object
drwxrwxrwx 1 root root 4096 ноя 22  2019 vim-go
drwxrwxrwx 1 root root 4096 дек 10  2018 vim-hug-neovim-rpc~
drwxrwxrwx 1 root root 4096 фев 25  2016 vim-imba
drwxrwxrwx 1 root root 4096 сен 30  2016 vim-jsdoc
drwxrwxrwx 1 root root 4096 мар 15  2019 vim-keysound
drwxrwxrwx 1 root root 4096 авг 11 18:22 vim-lsc
drwxrwxrwx 1 root root 4096 июл  5  2017 vim-mustache-handlebars
drwxrwxrwx 1 root root 4096 дек 10  2018 vim-scala
drwxrwxrwx 1 root root 4096 окт  1  2016 vim-surround
drwxrwxrwx 1 root root 4096 янв  5  2019 vim-vue
drwxrwxrwx 1 root root    0 июл 24  2017 xdebug

Про CtrlP вот, например, вообще забыли, хотя на работе пользовались (но конфиг забрать не успели).

чтобы хоть как-то можно было кодить в нём

Как-то кодить можно и в NOTEPAD.EXE, зажрались Вы! :P Хотите про опыт кодинга через мост из TeamViewer и двух RDP расскажем?

mertvoprog
()
Ответ на: комментарий от mertvoprog

Про ctrlp.vim. Приведи, пожалуйста, пару примеров, как ты им пользуешься? Я потыкал и удалил, потому что как-то без него обхожусь. Может он здорово ускоряет какие-то операции?

rmu ★★
() автор топика

В режиме ввода сделал для удобства перемещение

vim-rsi

/thread и не страдай (да это должно быть по дефолту, но это ж брам и это вим)

anonymous
()
Ответ на: комментарий от rmu

этим только особые люди и раньше-то пользовались но в 2021 это конечно уже не особый люд а особый дебилизм (оно до сих пор не асинхронное?). а вообще подобные плагины были бы хороши, если бы нормально интегрировались с вимом как технически так и по философии, а проще говоря были его частью. а не через жопу как-то с ним общались.

anonymous
()
Ответ на: комментарий от rmu

Я лично использую CtrlP для переключения буферов. Это оказалось удобнее всех прочих способов. Для нечеткого поиска по именам файлов, тегам и т.п. юзаю сейчас fzf. Потому что CtrlP медленный, и алгоритм там слегка упоротый. Но вообще то заметил, что довольно редко этим пользуюсь.

anonymous
()
Ответ на: комментарий от rmu

Написали же, что забыли :P

Хотя для чего-то вот пользовались, специально для этого ставили даже.

mertvoprog
()
Ответ на: комментарий от rmu

CtrlP был нужен когда еще не было fzf. Из всех подобных плагинов он был самый вменяемый и быстрый. А теперь он уже лет 7 как заброшен. Но если в системе нет возможности установить fzf, то CtrlP может пригодится как фолбек. Его преимущество в том, что это чистый viml, работает везде.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.