Как скопировать Ctrl + A и Ctrl + Shift + по-другому?

В терминале нельзя отличить Ctrl + A и Ctrl + Shift + A, поскольку оба они испускают один и тот же ключевой код, поэтому я вижу, почему Vim не может этого сделать. Но gVim, будучи X-приложением, может различать Ctrl + A и Ctrl + Shift + A. Есть ли способ сопоставить эти две вещи по-другому?

Для начала я хотел бы сделать что-то вроде следующего: Сделать «вставка из буфера обмена» работать как терминал Gnome, сохраняя Ctrl + V в визуальном режиме.

:nmap  "+gP 

Гвим не делает этого, потому что vim не может этого сделать (при нормальных обстоятельствах). Извините, но так оно и есть.


Однако…

Некоторые терминалы (например, xterm и iterm2) могут быть настроены для отправки произвольной escape-последовательности для любой комбинации клавиш.

Например, добавьте следующее в .Xresources для xterm, чтобы отправить [65;5u для Ctrl Shift A. Затем вы можете сопоставить это в Vim с . (65 – десятичное значение Unicode для shift-a, а 5 – бит для модификатора ctrl. В этом случае u означает «unicode».)

 ! .Xresources XTerm*vt100.translations: #override Ctrl ~Meta Shift a: string(0x1b) string("[65;5u") 

iTerm и [u] rxvt также могут быть настроены для этого (примеры не приводятся).

Дополнительная информация: http://www.leonerd.org.uk/hacks/fixterms/

Если вы беспокоитесь о том, что теряете существующую функциональность CV, вы можете использовать CQ. См.,: Помощь CTRL-V-альтернатива.

Как уже указывалось, нет способов сопоставления разному от .

Однако, используя такие инструменты, как autokey (для linux & windows) или autohotkey (для Windows), вы можете переназначить чтобы отправить различные ключевые autohotkey для определенных приложений.

например, в моей системе у меня есть эта настройка в autokey :

 $ cat ~/.config/autokey/data/gnome-terminal/ctrlshifta-gnome-terminal.py #ctrl+shift+a sends 'a' keyboard.send_keys("+a") # Note that `f` in `f1` needs to be in lower case. 

Назначьте следующие свойства:

  1. сочетание клавиш ctrl+shift+a
  2. class windows: gnome-terminal-server.Gnome-terminal

Тогда ваш ~/.vimrc может создать сопоставление для a чтобы делать все, что вы хотите.


Заметки:

  1. Я использовал как лидирующий ключ для обнаружения . Это произошло потому, что мой терминал не принимал ключи т. Д. Если ваше приложение поддерживает его, ( gvim , я думаю), рекомендуется использовать эти ключи.
  2. В основном я vim в gnome-terminal . Поэтому я использовал window class = gnome-terminal-server.Gnome-terminal как фильтр. Измените его, чтобы использовать gvim если хотите. autokey поддерживает кнопку для захвата любых других свойств windows, таких как class / заголовок.

Как вы уже отметили, вы получаете тот же самый ключ. Таким образом, единственный способ отличить их – проверить состояние клавиши Shift в вашей функции обработки событий. Конечно, если у вас более 0,5 секундной задержки между нажатием и обработкой, вы пропустите некоторые хиты.

Из-за того, что ввод с клавиатуры осуществляется внутренне, к сожалению, сегодня это вообще невозможно, даже в GVIM. Некоторые комбинации клавиш, такие как Ctrl + не-алфавит, не могут быть сопоставлены, а Ctrl + letter или Ctrl + Shift + буква не может быть выделена. (Если ваш терминал не отправляет отдельный код termcap для него, чего больше всего нет.) В режиме ввода или командной строки попробуйте ввести комбинацию клавиш. Если ничего не происходит / не вставлено, вы не можете использовать эту комбинацию клавиш. Это также относится к / , / / / и т. Д. (Только исключение – / .) Это известная точка боли , и предметом различных обсуждений на vim_dev и #vim IRC-канале.

Некоторые люди (прежде всего Пол ЛевНерд Эванс) хотят это исправить (даже для консоли Vim в терминалах, которые поддерживают это), и предложили различные предложения, ср. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

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

NeoVim теперь предлагает эту функциональность как для своих терминальных, так и для клиентов gui. Смотрите : h nvim-features-new

  • VIM - Как сопоставить Shift-Enter
  • Переопределить вкладку как 4 пробела
  • Почему ci "и ci (, ci {... ведут себя по-другому?
  • vim, быстрое переключение между файлами с помощью ванильного Vim (без плагинов)
  • Более полезная статусная линия в vim?
  • Вставить в режиме вставки?
  • Давайте будем гением компьютера.