LINUX.ORG.RU

Сделать из vim C++ IDE, подскажите, пожалуйста, список дополнений

 ,


7

9

Предъистория: несколько раз пытался пользоваться vim и каждый раз бросал. Всякий раз он мне казался неудобным. В этот раз плюнул на стандартные настройки, перенастроил его по-нормальному и да, теперь им сходу стало можно пользоваться как редактором текста. В частности: перенёс перемещение курсора с hjkl на esdf и esc на shift+space. Также, курсор при движении влево-вправо теперь не останавливается на конце строки.

Вимом стало возможно нормально пользоваться! Теперь, я хочу затюнить его под С++ кодинг.

Для этого мне минимально необходим следующий функционал:

  • переключение между заголовочником и исходником,

  • переход к определению функции под курсором,

  • переход к объявлению функции под курсором,

  • переход к предыдущей позиции курсора (не используя закладки),

  • плагин для содержащания файлов проектах,

  • переход к файлу, указанному директивой include под курсором,

  • аналог вкладок в других редакторах и переключение между ними,

  • подсветка синтаксиса,

  • подсветка всех слов аналогичных тому, что под курсором (по клавише),

  • инкрементальный поиск,

  • поиск во всех файлах проекта с подсветкой найденного,

  • переименование метода класса в исходнике с автоматическим изменением сигнатуры в заголовочнике,

  • astyle (ну это просто),

  • автодополнение (уже подсказали в другой теме, не пишите про него),

  • дебаггер (с вычислением символа под курсором и переходом из одной точки дебага в другую),

  • листинг ошибок компиляции со списком для удобного перехода на строку с ошибкой (такая штука, которая внизу экрана любой обыяной IDE).

  • Ну и, конечно, сохранение/открытие проекта, быстрый запуск компилятора и скомпилированного файла.

Ну вот и всё. Вроде ничего не забыл.

★★★★★

Последнее исправление: next_time (всего исправлений: 3)
Ответ на: комментарий от val-amart

так устраивает, что пришлось писать отдельный дополнительный плагин (vimux-paster)? В tslime2 это из коробки:

    vnoremap <buffer> <silent> <localleader>[ :SendSelectionToTmux<cr>

незнаю чем он лучше,

Тем, что это настоящий REPL, а не одноразовый односторонний интерфейс.

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

spacemacs

Писал про него новость еще 2 года назад, в курсе.

Блочное выделение уже завезли? Стартует так как вим или 3 секунды? Лень компилять имакс, чтобы посмотреть. Если да, то буду компилять.

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

блочное выделение

<C-v>? да

Стартует так как вим или 3 секунды?

[238 packages loaded in 2.412s]

решается с помощью emacs --daemon

а ваще когда я на вим много плагинов навешал он тоже не айс стартовал(по ощущениям столько же примерно, может на 0.5-1 сек меньше)

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

2.412s

это даже фукен не смешно:

169.165  000.014: --- NVIM STARTED ---
169 миллисекунд, в одной секунде — 1000 миллисекунд.

38 плагинов:

Plug 'chrisbra/NrrwRgn'
Plug 'chrisbra/vim-diff-enhanced'
Plug 'christoomey/vim-tmux-navigator'
Plug 'fatih/vim-go'
Plug 'gregsexton/MatchTag'
Plug 'itchyny/lightline.vim'
Plug 'jimsei/winresizer'
Plug 'junegunn/vim-after-object'
Plug 'junegunn/vim-easy-align'
Plug 'junegunn/vim-oblique'
Plug 'junegunn/vim-pseudocl'
Plug 'kana/vim-textobj-indent'
Plug 'kana/vim-textobj-user'
Plug 'matze/vim-move'
Plug 'mbbill/fencview'
Plug 'osyo-manga/vim-over'
Plug 'paradigm/TextObjectify'
Plug 'Raimondi/delimitMate'
Plug 'rking/ag.vim'
Plug 'romainl/vim-qlist'
Plug 'ryan-cf/netrw'
Plug 'scrooloose/nerdtree'
Plug 'Shougo/deoplete.nvim'
Plug 'Shougo/neoinclude.vim'
Plug 'Shougo/vimproc.vim'
Plug 'Shougo/vimshell.vim'
Plug 'sjl/tslime2.vim'
Plug 'tomtom/tcomment_vim'
Plug 'tpope/timl'
Plug 'tpope/vim-commentary'
Plug 'tpope/vim-endwise'
Plug 'tpope/vim-markdown'
Plug 'tpope/vim-repeat'
Plug 'tpope/vim-surround'
Plug 'vim-scripts/ingo-library'
Plug 'vim-scripts/visualrepeat'
Plug 'wellle/tmux-complete.vim'
Plug 'zchee/deoplete-jedi'

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

да, но как я уже сказал после emacs --daemon ваще как-то не чувствую, а время старта первого инстанса — это уже слишком тупое писькомерство

и да, 220 > 38

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

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

для меня это не тупое и не мерятельство, я запускаю редактор 100 или более раз в день.

emacs --daemon

ненужный костыль, не хватало еще димон-сервак для редактора включать, да еще кроме всего прочего придется обмазываться гуйками, нет спасибо (т.к. при -nw весь смысл пропадает).

Кстати плагинов не 38, а 39, при форматировании пропал marijnh/tern_for_vim.

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

я запускаю редактор 100 или более раз в день.

аналогично, но я пускаю emacsclient, который стартует примерно мгновенно, а время старта демона — одно на перелогин, так что уго можно опустить и считать время старта emacs временем старта emacsclient(ибо на практике так и есть)

ненужный костыль

нужный, и не костыль, ибо удобно, когда из одного клиента можно открыть буфер любого другого

обмазываться гуйками

а что плохого?

при -nw весь смысл пропадает

лично у меня при -nw пропадает разве что fringe, который юзается для довольно полезных функций(брейкпоинты/ошибки компиляции/подобное), но не то что бы прям сильно нужен. а какой «смысл» пропадает?

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

ну как, все прелести гуйка: 20 тыщ мильонов цветов, одновременно разные размеры и виды шрифтов в разных местах, более умная асинхронная live подсветка и прочее. Или имакс так не умеет? Вроде умел.

а что плохого?

как что, по ssh на удаленной машине использовать, которая как в моем случае в 1.5 метрах от ноута)

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

20 тыщ мильонов цветов

да, но мне почти никогда не было нужно

разные размеры и виды шрифтов в разных местах

ой, а вот про это не вспомнил, хотя частенько редактирую org

более умная асинхронная live подсветка

ваще не слышал, что это есть

по ssh на удаленной машине использовать

в чем проблема делать сие с emacs -nw?

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

я не оч в генте разбираюсь(ни разу её не было), но видимо там он умеет компилиться без иксов, а надо с иксами

f1u77y ★★★★
()
Plugin 'VundleVim/Vundle.vim'

"	Vim look&feel
Plugin 'terryma/vim-expand-region'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'sjl/gundo.vim'
Plugin 'fholgado/minibufexpl.vim'
Plugin 'mhinz/vim-startify'
 
" Needed by unite
Plugin 'Shougo/vimproc.vim'
Plugin 'Shougo/unite.vim'

" File Browser
Plugin 'Shougo/vimfiler.vim'

" Maps for quickfix and location windows (leader-q and leader-l respectively)
Plugin 'Valloric/ListToggle'

" Dev
Plugin 'Valloric/YouCompleteMe'
Plugin 'scrooloose/syntastic'
Plugin 'majutsushi/tagbar'
Plugin 'octol/vim-cpp-enhanced-highlight' 
Plugin 'lyuts/vim-rtags'
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'tomtom/tcomment_vim'

" Git
Plugin 'tpope/vim-fugitive'
Plugin 'airblade/vim-gitgutter'

" pairs delimiters
Plugin 'Raimondi/delimitMate' 

" Switch source/header
Plugin 'derekwyatt/vim-fswitch'

" Better marks
Plugin 'kshenoy/vim-signature'
deathmokar
()

перенёс перемещение курсора с hjkl на esdf и esc на shift+space

e - переместиться на конец слова
s - заменить удалить символ под курсором и перейти в режим вставки
d - часть последовательности для удаления блоков
f - часть последовательности для переход на символ

Чем shift+space удобнее esc даже не догадываюсь.

переключение между заголовочником и исходником,

A.vim

переход к определению функции под курсором,
переход к объявлению функции под курсором,

YCM

переход к предыдущей позиции курсора (не используя закладки),

``

плагин для содержащания файлов проектах,

Хз что это значит, может вам нужен nerdtree?

переход к файлу, указанному директивой include под курсором,

gf

аналог вкладок в других редакторах и переключение между ними,

Почитайте что такое табы, а что такое буфера.

подсветка синтаксиса,

В дефолте же.

подсветка всех слов аналогичных тому, что под курсором (по клавише),

augroup AutoHighlight
au!
au CursorHold * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
setlocal updatetime=300
augroup END



инкрементальный поиск,

set incsearch

поиск во всех файлах проекта с подсветкой найденного,

command! GrepWordInFiles :call s:GrepInFiles()
function! s:GrepInFiles()
let s:ext = expand(«%:e»)
if s:ext == «cpp» || s:ext == «c» || s:ext == «h» || s:ext == «ino»
let s:mask = «*.h *.c *.cpp **/*.h **/*.c **/*.cpp **/*.ino»
else
let s:mask = «*» . (s:ext == «» ? «» : ".") . s:ext . " **/*" . (s:ext == «» ? «» : ".") . s:ext
endif

let s:word = expand(«<cword>»)
execute «silent! noa vim! /\\<» . s:word . «\\>/gj » . s:mask | copen
endfunction



переименование метода класса в исходнике с автоматическим изменением сигнатуры в заголовочнике,

Есть плагины для этого, я не использую. Мне проще это сделать руками.

дебаггер (с вычислением символа под курсором и переходом из одной точки дебага в другую),

Все существующие говно. А плагин lldb скорее мертв, чем жив.

листинг ошибок компиляции со списком для удобного перехода на строку с ошибкой (такая штука, которая внизу экрана любой обыяной IDE).

:h copen

Ну и, конечно, сохранение/открытие проекта,

Плагин session.

быстрый запуск компилятора и скомпилированного файла.

:h make

Ей богу, проще было включить голову и погуглить, чем ждать готоых ответов по такой элементарщине.

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

Вообще был когда-то такой IDE-плугин «a.vim»

Не путаешь с «c.vim»?

Это разные плагины.

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

и все равно проигрывает нормальным IDE в удобстве и фичастости.

Теперь вам осталось описать ваше понимание IDE и дать список этих IDE, которые подходят под ваше понимание.

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

В генте вим идёт с +clientserver, для этого не нужен USE-флаг.

vim --servername test
запускается сервак
vim --servername test --remote file.txt
открывается в том открытом виме файл file.txt, есть еще --remote-tab.

читай :h remote.txt

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

qtcreator, к сожалению, несколько глючен и не всегда успешно развёртывается на новой машине с первого раза, кроме того, его vim - mode не умеет в whichwrap и, к тому же, в vim-mode не работают сочетания клавиш qtcreator. Вот если бы из vim-mode qtcreator в vim-стиле можно было бы пользоваться фичами этой IDE...

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

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

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

Чем shift+space удобнее esc даже не догадываюсь.

Очевидно тем, что Esc используется для частой операции выхода из режима вставки, при этом, до это клавиши приходится далеко тянуться, и т.о. убирать руки с буквенного ряда, по удобству, это почти тоже самое, что мышь в руки взять. Про альтернативные сочетания на ctrl я тоже в курсе, но и они неудобны, т.к. ctrl находится только с одной стороны клавиатуры, в отличие от shift и space.

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

Это уже лишнее, имхо. Что может быть проще :mks! file и :e file?

Я особо этим не балуюсь, но в Startify было довольно удобно, что он сам файлы куда-то складывал и при запуске отображал список из них.

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

ахах, и часто глючил, делая из сессий кашу-малашу :) если ему что-то не нравилось в ~/.viminfo, короче я отказался от него, да и стартовый экран пустой как-то больше нравится теперь.

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

Plug 'scrooloose/nerdtree'

А чем оно лучше встроенного :E (Explore / netrw)?

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

Стартует так как вим или 3 секунды?

Конечно нет. Однако на совместимость это никак не влиятет.

Блочное выделение уже завезли?

Если ты про visual mode, то завезли.

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

Теперь вам осталось описать ваше понимание IDE и дать список этих IDE, которые подходят под ваше понимание.

Последняя IDE, которой я пользовался, был Borland Delphi 5.

vim и emacs — это текстовые редакторы общего назначения, а поэтому они не умеют:

  • intellisense — после появления libclang появились ультрабазовые зачатки «умного дополнения», однако это ограничивается member-ами класса. В частности
    void myfunc() {}
    
    int main()
    {
      return my<C-Space>; /* без зазрения совести предложит myfunc */
    }
    
  • всплывающие подсказки по аргументам функций, в том числе перегруженных — в текстовом режиме UI крайне убог и для такого функционала. В emacs можно организовать подходящий view, но, к сожалению, для него нет источника данных
  • максимально точная навигация по коду: find references, got to definition/declaration и т. д. — без «управления проектом» невозможно перейти к правильному definition-у.
  • переименование функций/переменных (basic refactoring)
  • поддержка отладки (даже в turbo pascal 6.0 отлаживаться было удобнее, чем с любым набором плагинов современного vim-а)
kawaii_neko ★★★★
()
Ответ на: комментарий от ns_ramesses

Это уже лишнее, имхо. Что может быть проще :mks! file и :e file?

vim-session использует эту команду. Но кроме этого сохраняет всякие спец. окна (типа NERDTree), некоторые настройки, которые ты мог менять, quickfix list и что-то там еще. В общем, дает более полное ощущение сохраненной сессии.

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

Очевидно тем, что Esc используется для частой операции выхода из режима вставки, при этом, до это клавиши приходится далеко тянуться, и т.о. убирать руки с буквенного ряда,

Сделайте маппинк на jk

по удобству, это почти тоже самое, что мышь в руки взять

У вас escape расположен где-то отдельно от клавиатуры.

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

Нет, не смотрел :)

Ладно, моё дело предложить, ваше дело отказаться.

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

kep, Spoofing

хорошее начало, бро.

вообще начинать с простнки плагинов - заведомый успех в обучении. далеко пойдешь.

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

А что он должен предложить?

Как минимум не стоит подставлять void-функции туда, где ожидается значение. А вообще, порядочный intellisense предлагает convertible-to-int объекты.

kawaii_neko ★★★★
()

я использую Вим для работы в C++. Вот мой рецепт:

Все это круто посолить изучением хелпов Вима, и варить пару месяцев осваивая приемы работы с родными шоткеями.

А как в Борланде или Мелкософте «интуитивно понятный...» в Виме это не проходит.

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

Интересно, почему к началу 2016 года еще никто не написал полноценно работающий плагин-дебаггер для Vim, который реализовывал бы 100% функционала cgdb. Гораздо более сложные вещи типа syntastic запилили.

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

И насколько это помогает ускорить написание кода?

Злоупотребляя подобными аргументами, можно прийти к выводу, что для написания кода достаточно notepad.exe разлива времён windows 95.

Строго говоря, именно «ускоряют» написание кода только объемные сниппеты. Остальное — так, чисто для удобства.

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

Как минимум не стоит подставлять void-функции туда, где ожидается значение.

Это сейчас там void foo(), а после написания return foo() я сделаю int foo().

А вообще, порядочный intellisense предлагает convertible-to-int объекты.

И где есть такой «порядочный»?

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

И где есть такой «порядочный»?

В «порядочных», к слову, означенная проблема решается ранжированием (подходящие по типу варианты идут в начале списка). Можешь проверить, если любопытно.

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

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

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

yavide

Shortcut-ы для создания/удаления проекта впечатлили. Ведь это такая частая операция, что без шортката не обойтись.

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

ещё бы они работали, а то проект, что-то, ни разу не создаётся

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

для кого проще? разработчику редактора проще захардкодить открываемый файл, пользователю IDE проще открывать проект: проекты, вообще-то, нужны для реализации довольно большого числа удобств, одно из которых — автоматизированное заполнение файлов системы сборки

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

И где есть такой «порядочный»?

В «порядочных», к слову, означенная проблема решается ранжированием (подходящие по типу варианты идут в начале списка). Можешь проверить, если любопытно.

Повторю вопрос, где есть такой «порядочный» комплитер? К примеру, комплитер в вижле и хакоде полное говно.

И что вы собирались ранжировать в приведенном вами примере?

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