Как мне сопоставить ctrl x ctrl o с пространством ctrl в терминале vim? - PullRequest
49 голосов
/ 11 октября 2011

После небольшого поиска в сети кажется, что я не могу сопоставить Ctrl Пробел чему-либо / много.Есть ли способ сделать это сегодня, что я нашел, как правило, 2 года.

Ответы [ 7 ]

46 голосов
/ 10 сентября 2012

Я столкнулся с той же проблемой, краткий ответ - да, вы можете, и не только в графической версии.Для этого достаточно добавить .vimrc:

inoremap <C-Space> <C-x><C-o>
inoremap <C-@> <C-Space>
25 голосов
/ 11 октября 2011

Кажется, проблема в том, что Terminal.app неправильно интерпретирует <C-Space> и Vim понимает его как <C-@>, что является встроенным отображением (:help CTRL-@).

Может быть, вы могли бы пойти с чем-то вроде следующего в вашем .vimrc:

if !has("gui_running")
    inoremap <C-@> <C-x><C-o>
endif

здесь, похоже, работает, но мне не нравится идея переопределения встроенных функций, подобных этой.

Вместо этого вам следует попробовать <Leader> (:help leader), это дает вам огромные возможности для определения ваших собственных пользовательских сопоставлений и (в зависимости от выбранного вами mapleader) не будет мешать специфичным для ОС / приложений ярлыкам / ограничения и, следовательно, быть более переносимым.

С этим в моем .vimrc:

let mapleader=","
inoremap <leader>, <C-x><C-o>

Я просто нажал ,,, чтобы завершить имена методов.

6 голосов
/ 03 июля 2014

Нитпикер сломал раствор паблокса. Суть решения была только в переопределении. Поэтому, когда вы отключаете переназначение, оно не может работать.
Если вы действительно хотите добавить noremap, это выглядит так:

inoremap <expr><C-space> neocomplete#start_manual_complete()
imap <C-@> <C-Space>

Что будет не работать: inoremap <C-@> <C-Space>, потому что часть <C-Space> не будет переназначена сама.

3 голосов
/ 30 августа 2014

Добавьте следующий код в ~/.vimrc:

" Ctrl-Space for completions. Heck Yeah!
inoremap <expr> <C-Space> pumvisible() \|\| &omnifunc == '' ?
        \ "\<lt>C-n>" :
        \ "\<lt>C-x>\<lt>C-o><c-r>=pumvisible() ?" .
        \ "\"\\<lt>c-n>\\<lt>c-p>\\<lt>c-n>\" :" .
        \ "\" \\<lt>bs>\\<lt>C-n>\"\<CR>"
imap <C-@> <C-Space>

Источник: https://coderwall.com/p/cl6cpq

3 голосов
/ 11 октября 2011
  • Вы пробовали :inoremap <c-space> <c-x><c-o>?
  • Делает ли Ctrl X Ctrl O что-нибудь при вводе в режиме вставки? omnifunc установлен?
2 голосов
/ 03 августа 2017

Для размещения как Windows, так и Linux я применил это к ~/.vimrc

if has("unix")
  inoremap <C-@> <c-x><c-o>
elseif has("win32")
  inoremap <C-Space> <c-x><c-o>
endif
0 голосов
/ 21 сентября 2018

У меня были лучшие результаты с этим набором отображений во всех режимах на Mac OS. Не тестировал Windows или Linux.

Я не понимаю, как должен работать исключенный ответ в режиме терминала.

inoremap <C-space>   <ESC>
vnoremap <C-space>   <ESC>
cnoremap <C-space>   <C-c>
" When in terminal, <C-Space> gets interpreted as <C-@>
imap     <C-@>       <C-space>
vmap     <C-@>       <C-space>
cmap     <C-@>       <C-space>
...