Vim привязывает некоторые горячие клавиши, отличные от типа файла

#vim #autocomplete #file-type

#vim #автозаполнение #тип файла

Вопрос:

Я хочу привязать что-то вроде этого:

  • Для файлов CSS, HTML: <c-space> <c-x><c-n>

  • Для файлов Ruby: <c-space> <c-x><c-u>

Как это сделать?

Ответ №1:

Документация более полная, точная и правильная, но кратко:

Создайте файл в своей папке ftplugin (при необходимости создайте эту папку), начиная с типа файла, который вы хотите использовать.

 ├── vim
│   ├── after
│   ├── autoload
│   ├── bundle
│   ├── ftplugin
│   │   ├── python.vim
│   │   ├── rnoweb.vim
│   │   └── tex.vim
│   └── syntax
  

и в одном из этих файлов, например, в python.vim, строка типа

 noremap! <buffer> <F5> <Esc>:w<CR>:!python % <CR>
  

будет привязка, определенная только для этого типа файла, только в этом буфере. Убедитесь filetype plugin on , что в вашем vimrc отображается или аналогичный.

Редактировать: отличные предложения от Peter Rincker incorporated: версия noremap команды map и <buffer> флага. Он также напоминает нам использовать setlocal вместо set в наших файлах плагинов filetype.

Комментарии:

1. Вы захотите использовать <buffer> флаг, чтобы сделать сопоставления локальными в буфере. например inoremap <buffer> <c-space> <c-x><c-o> . Вы также захотите позаботиться об использовании setlocal параметров for .

Ответ №2:

Используйте autocmd:

 autocmd filetype css inoremap <buffer> <c-space> <c-x><c-n>  
autocmd filetype html inoremap <buffer> <c-space> <c-x><c-n>
autocmd filetype ruby inoremap <buffer> <c-space> <c-x><c-u>
  

Комментарии:

1. вы также можете комбинировать строки, autocmd filetype css,html setlocal...

2. Необходимо удалить setlocal

Ответ №3:

Поместите следующее в свой файл .vimrc. Замените строки do stuff своими привязками.

 :if match(@%, ".css") >=0 
: do css stuff
:endif

:if match(@%, ".rb") >=0 
: do ruby stuff
:endif