Как скопировать Ctrl + A и Ctrl + Shift + по-другому?
В терминале нельзя отличить Ctrl + A и Ctrl + Shift + A, поскольку оба они испускают один и тот же ключевой код, поэтому я вижу, почему Vim не может этого сделать. Но gVim, будучи X-приложением, может различать Ctrl + A и Ctrl + Shift + A. Есть ли способ сопоставить эти две вещи по-другому?
Для начала я хотел бы сделать что-то вроде следующего: Сделать «вставка из буфера обмена» работать как терминал Gnome, сохраняя Ctrl + V в визуальном режиме.
:nmap "+gP
- Почему Vim сохраняет файлы с расширением?
- Как изменить курсор vim в режиме Insert / normal?
- Могу ли я отобразить Alt в Vim?
- Почему \ n новая линия для Vim?
- В Vim, как эффективно вставлять одни и те же символы в несколько строк?
- Как запустить терминал внутри Vim?
- Как получить визуально выделенный текст в VimScript
- Как я могу расширить полный путь к текущему файлу, чтобы перейти к команде в Vim?
- Где мой .vimrc-файл?
- Как заставить vim делать обычную (bash like) вкладку завершения для имен файлов?
- Может ли vim контролировать изменения в реальном времени в файле
- Избавьтесь от выделения Vim после поиска текста
- Vim: применить настройки к файлам в каталоге
Гвим не делает этого, потому что vim не может этого сделать (при нормальных обстоятельствах). Извините, но так оно и есть.
Однако…
Некоторые терминалы (например, xterm и iterm2) могут быть настроены для отправки произвольной escape-последовательности для любой комбинации клавиш.
Например, добавьте следующее в .Xresources
для xterm, чтобы отправить
для 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.
Назначьте следующие свойства:
- сочетание клавиш
ctrl+shift+a
- class windows:
gnome-terminal-server.Gnome-terminal
Тогда ваш ~/.vimrc
может создать сопоставление для
чтобы делать все, что вы хотите.
Заметки:
- Я использовал
как лидирующий ключ для обнаружения
. Это произошло потому, что мой терминал не принимал ключи
–
т. Д. Если ваше приложение поддерживает его, (gvim
, я думаю), рекомендуется использовать эти ключи. - В основном я
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