Подтвердить что ты не робот

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

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

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

:nmap <C-S-V> "+gP
4b9b3361

Ответ 1

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


Однако...

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

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

Как уже указывалось, нет способов сопоставления <C-S-A> по-разному от <C-A>.

Однако, используя такие инструменты, как autokey (для linux и windows) или autohotkey (для окон) вы можете переназначить <C-S-A>, чтобы отправить различные ключевые штрихи для определенных приложений.

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

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

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

  • клавиатура-ярлык как ctrl+shift+a
  • класс окна: gnome-terminal-server.Gnome-terminal

Затем ваш ~/.vimrc может создать сопоставление для <S-F1>a, чтобы сделать все, что вам нужно.


Примечания:

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

Ответ 5

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

Ответ 6

Из-за того, что ввод с клавиатуры осуществляется внутренне, к сожалению, сегодня это вообще невозможно, даже в GVIM. Некоторые комбинации клавиш, такие как Ctrl + не-алфавит, не могут быть отображены, а Ctrl + letter vs. Ctrl + Shift + буква не может быть выделена. (Если ваш терминал не отправляет отдельный код termcap для него, чего больше всего нет.) В режиме ввода или командной строки попробуйте ввести комбинацию клавиш. Если ничего не происходит/не вставлено, вы не можете использовать эту комбинацию клавиш. Это также относится к <Tab>/<C-I>, <CR>/<C-M>/<Esc>/<C-[> и т.д. (Только исключение составляет <BS>/<C-H>.) Это известная точка боли и тема различных обсуждений vim_dev и канала #vim IRC.

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

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