Как автозаполнить ключевые слова c или c ++ в vim - PullRequest
4 голосов
/ 18 ноября 2011

Например, когда я набираю «include», есть ли метод, который может завершить его, чтобы «включить»?Спасибо.

Ответы [ 6 ]

3 голосов
/ 18 ноября 2011

Большинство (сложных) автозаполнений vim выполняется с помощью сопоставления клавиш ^X. ^X^] будет автоматически заполняться на основе тегов, сгенерированных ctags(1). ^X^P ищет предыдущие ключевые слова в файле, которые можно использовать для завершения. ^X^K ищет в настраиваемом dictionary слова завершения. ^X^I просматривает включенные файлы и открывает меню для заполнения ключевых слов из этих файлов. ^X^D завершается с #define.

Пожалуй, самый простой способ получить то, что вам нужно, это полностью набрать #include <...> один раз в вашем файле. Второй файл, который будет включен, может быть обработан с помощью #incl^X^P и затем продолжен.

Если вы хотите приложить немного больше усилий, создайте файл ~/.vim/dict с ключевыми словами, которые вы хотите автозаполнить, добавьте файл в переменную dictionary (:help dictionary) и используйте ^X^K для вставки это.

2 голосов
/ 19 ноября 2011

Возможно, вы захотите попробовать плагин Vim Supertab .Если вы это сделаете, я предлагаю установить его, используя Pathogen .

2 голосов
/ 18 ноября 2011

Может быть, вам пригодится любой плагин, такой как Snipmate или UltiSnips.

1 голос
/ 17 октября 2013

Вы можете настроить некоторые сокращения Vim, чтобы сделать это для вас.

iab inc #include ""
iab Inc #include <>

Затем, набрав inc<SPACE> Vim автоматически расширит это до #include "".Вы можете добавить все виды сокращений, чтобы уменьшить количество требуемых нажатий клавиш.

Если вы хотите продвинуться дальше, я поделюсь небольшим продолжающимся моим экспериментом по созданию сокращения C ++ ' ».Хотя это, безусловно, уменьшает количество нажатий клавиш, необходимых для ввода кода, я не использовал это достаточно долго, чтобы определить, стоит ли дополнительная умственная сложность запоминания стенографии.(Вероятно, нет!)

Вам нужно будет установить UltiSnips , чтобы это работало.Вероятно, вы могли бы сделать большую часть этого, используя функцию аббревиатуры Vim, но я обнаружил, что она лучше всего работает с выделенным завершителем фрагмента.

После установки UltiSnips у вас уже будет готово несколько фрагментов C и C ++, включая готовые к использованию, включая#include "" пример, упомянутый выше.

Я добавил следующее (плюс много, много больше!) в мой файл cpp.snippets.

snippet sptr "std::shared_ptr< type >"
std::shared_ptr< ${1:type} >
endsnippet

Когда я хочу shared_ptr, явведите sptr и нажмите клавишу завершения фрагмента.UltiSnips завершает это как std::shared_ptr< type > с выбранным словом type, так что я могу продолжать вводить тип шаблона без паузы.

В этом надуманном примере показаны некоторые сокращения.Это то, что я мог бы набрать:

// <C> is where I would press the UltiSnip complete/next key.
fun<C>sptr<C><C>load_widget<C>cu32<C>offset<C>, cc<C>name<C>ret<C>msptr<C>widget<C>offset<C>name<C>;

Что расширяется до:

std::shared_ptr< widget > load_widget( const std::uint32_t offset, const char* name )
{
    return std::make_shared< widget >( offset, name );
}

Грубый подсчет показывает, что это уменьшает примерно 136 нажатий клавиш до 100. С плагинами Omnicomplete или YouCompleteMe этосокращается, так как имена переменных и функций часто могут быть заполнены после ввода первых 2 или 3 символов.

Я стараюсь придерживаться этого шаблона при создании сокращения для типов: [c]type[r|p].[c] является необязательным const, [r] или [p] для необязательной ссылки или указателя.(r и p и мне легче набрать, чем & и *).Например, std::string имеет следующую сокращенную запись:

str   = std::string
strp  = std::string*
strr  = std::string&
cstr  = const std::string
cstrp = const std::string*
cstrr = const std::string&

Так что cstrr, наиболее распространенный из них в моем коде, сокращает 19 нажатий клавиш (есть конечный пробел) до 6.

1 голос
/ 12 ноября 2012

Snipmate делает это по умолчанию.введите 'inc' и нажмите Tab, он преобразуется в
#include <stdio.h>

0 голосов
/ 17 октября 2013

вы должны установить плагин omni: автозаполнение omni

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...