LINUX.ORG.RU

Посоветуйте хороший плагин, для языка Си?

 ,


4

7

Здравствуйте! Я самостоятельно взялся овладеть языком Си, но каждый раз, собственноручно набирать весь код виме не очень так скать хорошо, можете посоветовать хороший плагин, похожие как снипеты. Есть конечно штатные Ctrl+{p,n}, но они малоэффективны.



Последнее исправление: xazihivale (всего исправлений: 2)

1. А ты попробовал сначала спросить у гугла?
2. Если ты начинаешь постигать Си, может стоит для начала вбивать весь код руками для лучшего запоминания?
3. Если второй пункт тебе не подходит, посмотри на YouCompleteMe

Deleted
()

Если ты используешь vim:

Если ты используешь neovim:

далее универсальные плагины для vim и neovim:

Непонятно насколько у тебя прокачен сам вим, например стоят ли у тебя: tcomment для комментариев, vimshell для шелла и относительно обязательные для любой деятельности delimitMate, vim-surround, vim-repeat + visualrepeat, vim-after-object и так далее.

Остерегайся вонючего треша для трешхедов YCM (YouCompleteMe), а также по моему мнению c.vim слишком тяжел, его например не использует Greg Kroah-Hartman, который тонны на Си написал для этого вашего.

slon
()
Ответ на: комментарий от slon

Спасибо! Пока не очень прокачен, мой neovim, постепенно его изучаю. )

xazihivale
() автор топика

YouCompleteMe, vim-skeleton, fzf + fzf.vim, ag.vim, vim-airline, nerdcommenter, vim-fugitive, vim-autoformat, ultisnips, a.vim

andreyu ★★★★★
()
Ответ на: комментарий от slon

Остерегайся вонючего треша для трешхедов YCM (YouCompleteMe)

Ycm, конечно, тот еще монстр. Но вы знаете что-то лучшее для C и C++?

andreyu ★★★★★
()
Ответ на: комментарий от deep-purple

snipmate

а зачем он нужен если есть neosnippet + neosnippet-snippets? Я не пробовал, но предпочитаю пользоваться полным комплексом от Шуго: движок комплита + движок сниппетов + сами сниппеты, которые скорее всего и украдены из snipmate и т.п.

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

А работать нужно с комфортом, потому что в этой бесконечной Вселенной, на этом кусочке камня и говна, оборачивающего вокруг Солнца, звезды Солнечной системы, галактики Млечный Путь, Сверхскопления Девы — нам дан шанс лишь один раз пожить, поработать и попользоваться инструментами, перед тем как мы вернемся туда, откуда пришли: вечность, отсутствие света и небытие. Некоторые переживают насчет того, что с ними будет после смерти, я не переживаю, поскольку с относительно недавнего времени обрел уникальную возможность мыслить трезво и освободился от страхов.

Поэтому снипетты не нужно использовать, например.

slon
()
Ответ на: комментарий от slon

Вот ты задвинул ))

Да, я тоже раньше снипетами играл, но быстро переболел.

deep-purple ★★★★★
()
Ответ на: комментарий от slon

я же назвал что и ты сам прекрасно знаешь что (deoplete).

1) он для neovim, а я пока не готов к переходу на него.
2) в каком месте он хоть немного приблизился к возможностям ycm?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

1) он для neovim, а я пока не готов к переходу на него.

Не понимаю, в чем заключается готовность перехода на редактор, устанавливающейся через пакетный менеджер уже практически любого дистрибутива, включая маки через homebrew?

2) в каком месте он хоть немного приблизился к возможностям ycm?

а каких возможностей ycm не хватает в deoplete/neocomplete?

slon
()
Ответ на: комментарий от slon

Не понимаю, в чем заключается готовность перехода на редактор, устанавливающейся через пакетный менеджер уже практически любого дистрибутива, включая маки через homebrew?

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

а каких возможностей ycm не хватает в deoplete/neocomplete?

#include <map>
#include <vector>
#include <list>

class Class
{
  int priv;
public:
  int publ;
  typedef std::map<int, int> Map;
  typedef std::vector<Map> Vec;
  typedef std::list<Vec> Lst;
  Lst my_lst;
};

void foo()
{
  Class cl;
  cl. //<-- какой список предложит deoplete/neocomplete?
  cl.m_lst. //<-- а тут?
}



Я с удовольствием откажусь от монстра ycm, если ему найдется достойная замена.
Возможно, что я не осилил настройку neocomplete для произвольного проекта, который мне приходилось разрабатывать. С ycm все просто - скопировал в корень проекта давно написанный конфиг и подправил в нем пути к используемым либам (если есть такая необходимость).

Буду рад, если вы подскажете как настроить neocomplete для работы с проектами на C и C++.

andreyu ★★★★★
()
Последнее исправление: andreyu (всего исправлений: 1)
Ответ на: комментарий от andreyu

cl. //<-- какой список предложит deoplete/neocomplete?

http://i.imgur.com/t9acp2r.png

cl.m_lst. //<-- а тут?

http://i.imgur.com/4EXo3s8.png

Обратите внимание, что на втором скриншоте список не полный, нужно скролить.

Такое устраивает? Что показывает YCM в первом случае?

slon
()
Ответ на: комментарий от slon

http://i.imgur.com/t9acp2r.png

И что в том списке делает приватный член класса по имени priv? Впрочем это не столь страшно.

ttp://i.imgur.com/4EXo3s8.png

А если написать cl.m_lst.back().back().
Или так cl.my_lst.back().back().begin()->

Этот комплитер понимает семантику языка?

Такое устраивает?

Нужно попробовать в реальной работе. Может все не так плохо, как мне казалось ранее. Делитесь конфигом и способом настройки проекта.

Что показывает YCM в первом случае?


Class:: c
operator=( Class && ) f Class &
publ m int
my_lst m Lst
~Class() f void
andreyu ★★★★★
()
Ответ на: комментарий от andreyu

А если написать cl.m_lst.back().back().

http://i.imgur.com/zM9TZj0.png

Или так cl.my_lst.back().back().begin()->

У меня -> не работает, но вот гифка с репы для C++ deoplete, там -> работает, я не использую C++ (как Си, я просто мимо треда проходил), поэтому глубоко в настройку не копал, раз на гифке есть, значит работает.

Делитесь конфигом

function! DoRemote(arg)
  UpdateRemotePlugins
endfunction

Plug 'Shougo/deoplete.nvim', { 'do': function('DoRemote') }
let g:deoplete#enable_at_startup = 1
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"

Plug 'Shougo/neoinclude.vim'
if !exists('g:neoinclude#exts')
    let g:neoinclude#exts = {}
endif

let g:neoinclude#exts.cpp  = ['', 'h', 'hpp', 'hxx']

Plug 'zchee/deoplete-clang'
let g:deoplete#sources#clang#libclang_path = '/usr/lib64/libclang.so.3.8'
let g:deoplete#sources#clang#clang_header = '/usr/lib64/clang'

и способом настройки проекта.

Я ничего не настраивал, только открыл файл, возможно она нужна, а возможно и нет.

slon
()
Ответ на: комментарий от slon

Благодарю, завтра попробую еще раз осилить.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.