Как автоматически включить заголовки C ++ в vim? - PullRequest
3 голосов
/ 20 июня 2011

Часто я хочу использовать функции и контейнеры STL, и мне приходится добавлять вручную:

#include <vector>
using std::vector;

в начало файла.Кто-нибудь знает о плагине vim или программе командной строки, которая будет делать такие вещи автоматически?

Ответы [ 7 ]

5 голосов
/ 27 февраля 2015

Сначала вам нужно написать файл .cpp, который будет включать все заголовки, которые вам необходимы.

Мой выглядит примерно так:

#include<iostream>
#include<stdio.h>

using namespace std;

typedef long long int ll;

int main(void) {

return 0;
}

Теперь добавьте эту строку в вашФайл vimrc,

autocmd BufNewFile *.cpp r /path/to/template.cpp

Теперь каждый раз, когда вы открываете файл .cpp, у вас будет все, что вам нужно переписать.

5 голосов
/ 20 июня 2011

Возможно, но я бы не рекомендовал это.И #include <vector> совсем не сложно набрать.

Возможно, вы запускаете слишком много проектов, которые не завершаете, или используете слишком много разных файлов?

И, наконец, больше предпочтенийЯ предпочитаю использовать std::vector вместо vector, потому что тогда я уверен, что имею в виду, а именно стандартный вектор.

Вы, кажется, новичок, который думает, что вы можете сэкономить времяс using namespace std; & co, но поверьте мне, вы не делаете. Пожалуйста, не воспринимайте это как оскорбление, просто совет.

4 голосов
/ 20 июня 2011

Это довольно тяжелое сражение, когда вы начинаете хотеть какого-то причудливого поведения IDE от vim, особенно когда это требует анализа кода.

Вы должны решить, что для вас важнее: использовать vim в качестве редактора или получить помощь в написании кода.Если первое более важно для вас, придерживайтесь vim;в противном случае рассмотрите возможность приобретения достойной IDE, например Eclipse или NetBeans .

И в NetBeans, и в Eclipse есть плагины, в некоторой степени эмулирующие vim.NetBeans имеет:

  • jvi - в целом поддерживает множество функций vi, но довольно глючит из-за небольшого объема тестирования, которое я провел с ним (например, иногда он говорит, что вынаходятся в обычном режиме, но когда вы набираете клавиши, вы понимаете, что это не так, и вам нужно перезапустить, чтобы исправить это.)

Eclipse имеет:

  • vrapper - в целом довольно солидная реализация, но в ней есть досадные ошибки (при рефакторинге кода это иногда приводит к исключениям и рефакторингу не удается, пока что не нашли обходного пути). Похоже, это заброшенный проект.
  • eclim - активный проект, который позволяет запускать Eclipse в vim (это плагин vim, который добавляет некоторые функции Eclipse к vim, запуская Eclipse в качестве сервера) ИЛИ он позволяет запускать vim в Eclipse (нозатем вы теряете все встроенные функции Eclipse, которые могут нанести ущерб цели.) Используя его, он работает довольно хорошо, но он начинает становиться волосатым при добавлении новых файлов и трескиЧто касается проекта, то иногда кажется, что он не переиндексирует ваш проект должным образом, и кажется, что ничего, кроме загрузки Eclipse и принуждения Eclipse к переиндексации проекта, не работает.Также, как примечание, этот плагин для vim не будет выполнять то, что вы хотите, потому что они не реализовали эту функцию Eclipse
  • viplugin - довольно солидную реализацию функциональности vim.Бесплатно, но стоит около 20 долларов.Сопровождающий имеет спорадические обновления.Попробуйте и посмотрите, нравится ли вам это.
  • viable - один из самых надежных плагинов для эмуляции функциональности vim в Eclipse.После того, как я попробовал все другие варианты, которые я в настоящее время придерживаюсь, чтобы использовать этот в режиме следа, плагин платный ($ 15), так что я получаю раздражающие всплывающие окна каждые X раз.Я буду покупать его, если буду продолжать пользоваться им гораздо дольше.
2 голосов
/ 21 июня 2011
" the sixth line contains a model
augroup lang_cpp
    au!
    au BufNewFile,BufRead *.cpp set ft=cpp   
    au FileType cpp set omnifunc=omni#cpp#complete#Main
    au FileType cpp let OmniCpp_MayCompleteScope = 0 
    au BufNewFile *.cpp 0r ~/.vim/skel/cpp.skel
au    
2 голосов
/ 20 июня 2011

Я использовал следующие четыре сопоставления клавиатуры в моем .vimrc до того, как начал использовать emacs:

nmap _i I<C-m><Esc>kI#include ""<Esc>$i
imap <C-z>i <Esc>_i
nmap _I I<C-m><Esc>kI#include <><Esc>$i
imap <C-z><C-i> <Esc>_I

Первый, _ i в командном режиме вставляет #include "" в строку выше и оставляет курсор внутри кавычек в режиме вставки. Второе - то же самое для режима вставки, но я понятия не имею, почему я использовал CTRL-Z в качестве префикса команды. Вторая пара для системных заголовков. Вы используете I вместо i , чтобы получить его.

Я бы порекомендовал использовать что-то, что вы можете использовать в большем количестве мест, вместо выделенного для векторов, но вы можете легко изменить вышеприведенные, чтобы получить карту клавиатуры для вставки нужного фрагмента.

1 голос
/ 26 февраля 2017

lh-cpp фрагменты могут автоматически включать требуемые заголовки. Например, если вы наберете vect, вы увидите std::vector<|> расширенным, и #include <vector> добавленным, если еще не включено.

Однако в данный момент он не может увидеть, что <vector> уже был включен в другой включенный файл.

0 голосов
/ 10 июля 2016

Я нашел 3 плагина vim для автоматического включения заголовков c ++.

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