web-dev-qa-db-fra.com

Jak zmapować ctrl x ctrl o miejsca ctrl w terminalu vim?

À propos des endroits à visiter, si tout est à faire, il ne faut pas que ce soitCtrlSpacefaire wszystkiego/dużo. Vous êtes ici pour vous aider à comparer les prix, acheter et acheter des billets 2-lata.

49
plitter

J'ai rencontré le même problème, la réponse courte est oui, vous pouvez, et pas seulement dans la version gui. Ajouter ceci sur vous .vimrc est suffisant:

inoremap <C-Space> <C-x><C-o>
inoremap <C-@> <C-Space>

Le problème semble être que Terminal.app n'interprète pas <C-Space> correctement et que Vim le comprend en tant que <C-@> qui est un mappage intégré (:help CTRL-@). 

Peut-être que vous pourriez aller avec quelque chose comme ce qui suit dans votre .vimrc:

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

ce qui semble fonctionner, ici, mais je n'aime pas l'idée de surcharger les éléments intégrés de cette manière.

Au lieu de cela, vous devriez essayer avec <Leader> (:help leader), cela vous donne d’énormes possibilités pour définir vos propres mappages personnalisés et (en fonction de la mapleader que vous choisissez) n’interférera pas avec les raccourcis/limitations spécifiques au système d’exploitation/application et sera donc plus portable.

Avec cela dans mon .vimrc:

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

Je viens d'appuyer sur ,, pour compléter les noms de méthodes.

24
romainl

Le nitpicker a cassé la solution de pablox. Le nœud de la solution était sur le point de remapper. Ainsi, lorsque vous désactivez le remappage, cela ne peut pas fonctionner.
Si vous voulez vraiment ajouter une noremap, voici à quoi ça ressemble:

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

Qu'est-ce que not work: inoremap <C-@> <C-Space> 'car la partie <C-Space> ne sera pas remappée elle-même. 

5
oliver

Ajoutez le code suivant à ~/.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>

Source: https://coderwall.com/p/cl6cpq

3
Erwin Rooijakkers
  • Czy próbowałeś :inoremap <c-space> <c-x><c-o>?
  • RobiCtrlXCtrlOrobić wszystko, gdy wpisujesz avec trybie wstawiania? Cess ustawiono omnifunc?
3
Benoit

Pour prendre en charge Windows et Linux, j'ai appliqué ceci à ~/.vimrc

if has("unix")
  inoremap <C-@> <c-x><c-o>
elseif has("win32")
  inoremap <C-Space> <c-x><c-o>
endif
2
Kidquick

J'ai obtenu de meilleurs résultats avec cet ensemble de mappages dans tous les modes sur Mac OS. Je n'ai pas testé Windows ou Linux.

Je ne comprends pas comment la réponse exclue est supposée fonctionner en mode terminal.

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>
0
cmcginty