Как изменить привязку клавиш, используемую для автозаполнения в vim? - PullRequest
36 голосов
/ 16 февраля 2010

Я не большой поклонник Ctrl-n, я бы хотел использовать Ctrl-Space. Есть идеи, как мне это сделать?

Ответы [ 3 ]

33 голосов
/ 17 февраля 2010
if has("gui_running")
    " C-Space seems to work under gVim on both Linux and win32
    inoremap <C-Space> <C-n>
else " no gui
  if has("unix")
    inoremap <Nul> <C-n>
  else
  " I have no idea of the name of Ctrl-Space elsewhere
  endif
endif
18 голосов
/ 16 февраля 2010

Мне также нравится отображение Ctrl + Space.

" Remap code completion to Ctrl+Space {{{2
inoremap <Nul> <C-x><C-o> 

В вашем случае вы хотите:

inoremap <Nul> <C-n>
8 голосов
/ 16 февраля 2010

Если вы хотите отобразить его, скажем, Ctrl-E, это будет что-то вроде:

inoremap <C-E> <C-N>

Проблема с Ctrl - Пробел заключается в том, что большинство терминалов просто увидят его как пробел. Я предполагаю, что вы используете некоторую терминальную программу внутри X; если вы используете что-то другое, вам придется самим делать соответствующие замены.

В readline Bash обычно есть Ctrl - V , сопоставленный для "обработки следующей клавиши как литерала". Поэтому, нажав Ctrl - V , затем Home в командной строке bash вставит ^[[H или что-то подобное в командную строку, а не в начало строки. Попробуйте нажать Ctrl - V , затем Ctrl - Пробел . Возможно, вы просто увидите пробел.

В этом случае вам придется дурачиться с помощью xmodmap или написать свои собственные файлы / usr / share / X11 / xkb / *, чтобы заставить X выводить что-то другое, когда вы нажимаете Ctrl - Space . Такие программы, как Firefox, не волнуют; они определяют, какая базовая клавиша нажата, и сами выясняют, какие модификаторы нажимаются. Но большинство терминальных программ просто увидят Ctrl - Пробел как Пробел, если вы не скажете X обрабатывать Пробел и Ctrl - Пробел по-разному.

Я сомневаюсь, что вы можете сделать это изменение только с помощью xmodmap; вам, вероятно, понадобится взломать / usr / share / X11 / xkb / * нижнего уровня. Это сложно, и я даже не знаю, используете ли вы X в первую очередь, поэтому я просто оставлю это там.

Некоторые терминалы, такие как urxvt, позволяют указывать ваши собственные сочетания клавиш. Как и Firefox, они могут определить, когда это Space, а когда Control-Space, даже если вы не делаете ничего особенного для настройки X. Таким образом, вы можете указать urxvt выводить «\ 033I_TYPED_CONTROL_SPACE_DAMMIT» при нажатии Ctrl - Space . И тогда вы можете указать vim сопоставить , что с <C-N>.

EDIT: я забыл, что Ctrl-Space использовал для вывода \0 (я переназначил это где-то еще на моей клавиатуре). В этом случае вся сложность, которую я описал выше, не нужна. То, что я сказал, относится к тому, кто хочет использовать более экзотическое сопоставление, например Ctrl -колон или Alt - Пробел .

...