Завершение вкладки как в Textmate? - PullRequest
1 голос
/ 08 ноября 2011

Я хочу использовать табуляцию в Vim, как в Textmate.

Вот так.

  • Запуск <Tab> должен переключаться между словами в текущем документе, начиная с ближайшего.
  • Предложения должны отображаться в строке, а не в списке.

Было бы замечательно, если бы, если в текущем файле не было слов, можно было перебирать слова из словаря.

Я сейчас использую supertab , возможно ли настроить его под мои нужды?

Вот соответствующий код из моего файла vimrc.

function! Tab_Or_Complete()
  if col('.')>1 && strpart( getline('.'), col('.')-2, 3 ) =~ '^\w'
    return "\<C-N>"
  else
    return "\<Tab>"
  endif
endfunction
inoremap <Tab> <C-R>=Tab_Or_Complete()<CR>
set dictionary="/usr/share/dict/words"

1 Ответ

4 голосов
/ 08 ноября 2011

Давайте проясним.

Нажатие <tab> в TextMate вообще не обеспечивает завершение слова, оно вызывает расширение фрагментов.

Завершение слова с использованием содержимого текущего файла вызывается нажатием <Esc>.

Полуинтеллектуальное завершение кода может быть обеспечено текущим активным пакетом, чаще всего с использованием <Alt><Esc>.

Это три типа завершения с тремя разными сочетаниями клавиш и тремя совершенно разными интерфейсами и поведением.

Теперь на стороне Vim…

Разработаны некоторые плагины (SnipMate, SnippetEmu…)обеспечить эквивалент <Tab> системы расширения TextMate.

Завершение слова обеспечивается встроенной функцией, называемой «завершение режима вставки» (:help ins-completion), и запускается при нажатии <C-n> или * 1021.* или <C-x><C-k> для завершения из словаря.

Завершение кода обеспечивается встроенной функцией, называемой «omni завершение» (:help new-omni-completion), и вызывается нажатием <C-x><C-o>.

* 1028.* Я не думаю, что вы хотите имитировать расширение <Tab> TextMate или выполнять завершение кода.

Это оставляет нам смесь

  • <C-n> или <C-p> дляКолорадоЗаполните словами из текущих буферов
  • <C-x><C-k>, чтобы завершить из вашего словаря
...