Делаем из Vim-а конфетку

    Вы под давлением коллег или сокурсников из более успевающих групп решились на отчаянный шаг, способный разделить вашу жизнь на период "до" и "после" (прошли vimtutor), и теперь не знаете что делать с вашими новообретёнными способностями? А может вы всё ещё сидите в какой-нибудь IDE и в ус не дуете зачем вам "эти ваши программистские блокноты" и "какой-то там Vim"? Тогда присаживайтесь поудобнее и налейте себе лимонад, сейчас я вам всё по полочкам разложу.



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


    1. Вступление
    2. Менеджер плагинов
    3. Настойка внешнего вида
    4. Поддержка Русского языка
    5. Интеграция с внешними программами
    6. В кратце о(б)
    7. Заключение


    Давайте определимся с терминологией


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


    Рабочая среда — это набор программ для разработки ПО. Например, он может содержать компилятор, интерактивную консоль, редактор раположения GUI элементов, дебаггер и прочее. Редактор — это лишь маленький кусочек этого пазла.


    IDE — это вся рабочая среда, сосредоточенная в одном месте. Конечно, есть программы наподобии Emacs (далее Емакс), где вы сами вольны вставить в неё всё, что вам угодно при должном умении, однако чаще всего это уже готовый, собранный за вас пакет.


    Зачем мне нужен тогда Вим, если за меня всё сделает IDE?


    Раньше весомым аргументом была его раскладка, так как она для многих удобнее современных Емаксо-подобных многокнопочных комбинаций клавиш для навигации и редактирования текста. Однако, благодаря Neovim и другим проектам, таким как VSCodeVim, она есть буквально везде.


    Однако есть ещё один более весомый аргумент — производительность. В IDE часто имеется огромное количество функциональности, которым вы не пользуетесь, и фоновых процессов, которые сильно нагружают систему. Даже если ваш Макбук не орёт как истребитель от PyCharm или у вас не лагает скроллинг в Visual Studio (что невозможно, врунишки вы мои), а однопоточность Емакса не напоминает о первом Crysis или S.T.A.L.K.E.R., то всё равно встаёт вопрос энергопотребления и, как следствие, времени жизни батареи. Такое ПО в линукс сообществе характеризуют мемом термином "bloat".



    Почему Вим?


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


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


    1. Он очень быстрый. Ввиду особенностей его рендера, Вим имеет намного меньшую задержку, чем другие редакторы. После него другие редакторы кажутся неотзывчивыми, я уже молчу про выше упомянутые IDE.
    2. Его использование подобно прохождению третьего Dark Souls после первой части. Сначала сложно и непривычно, так как игра стала быстрее, и нельзя зачизить многие сложные моменты с помощью RPG составляющей, но потом приходит осознание того, что игра оказуалилась, и почти все боссы одолеваются со второй попытки.
    3. Он практически не тратит ресурсы и запускается даже на хлебушке, что очень хорошо сказывается на батарее.

    В принципе, ничего откровенно плохого в других редакторах нет, так что оставьте этот выбор на сугубо ваше личное усмотрение. Меня не покидает уверенность, что вы сможете найти аналогичную статью для вашей любимой программы. Хотя, будем откровенными, редакторы на electron еле-еле проходят по критерию энергоэффективности.


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



    Вставьте шутку про штепсель


    Главным оружием для настройки нашего друга явлются плагины. По сути дела, это просто отдельные файлы с кодом на VimScript, которые исполняются при загрузке вашего файла настроек (~/.vimrc или ~/.config/nvim/init.vim) командой source. Ручками скачивать всё это довольно больно, поэтому великие умы человечества придумали пакетные менеджеры… для Вима!


    Главная задача пакетного менеджера — скачать указанные плагины с гитхаба, предоставить пользователю удобный интерфейс по управлению ими и, собственно, подключать их при загрузке Вима. Есть, конечно, минималистичные менеджеры по типу Pathogen (который занимается преимущественно только третьим), но мы настолько усложнять себе жизнь не будем.


    Нашим подопечным сегодня выступит vim-plug. Но, прежде чем вы пойдёте его устанавливать, сначала нужно добавить пару строчек в ваш конфиг:


    filetype plugin indent on "Включает определение типа файла, загрузку...
    "... соответствующих ему плагинов и файлов отступов
    set encoding=utf-8 "Ставит кодировку UTF-8
    set nocompatible "Отключает обратную совместимость с Vi
    syntax enable "Включает подсветку синтаксиса

    Эти команды вы чаще всего встретите в инструкциях по установке различных плагинов. Теперь давайте установим сам менеджер пакетов. Тут есть нужные команды для Vim и Neovim, но существует способ для его автоматического скачивания. Для этого добавьте следущие строчки в свой конфиг:


    if empty(glob('~/.vim/autoload/plug.vim')) "Если vim-plug не стоит
      silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs "Создать директорию
        \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 
      "И скачать его оттуда
      "А после прогнать команду PlugInstall, о которой мы сейчас поговорим
      autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
    endif

    Тогда при следующем запуске Вима, менеджер будет автоматически установлен, но его команды работать не будут и вы увидите ошибку. Хочу также заметить, что у вас в системе должен стоять curl, а для Neovim нужно поменять ~/.vim на ~/.local/share/nvim/site. Прежде чем вы перезапустите ваш редактор, предлагаю также добавить в настройки следущие строчки. Не забудьте изменить этот код для Neovim аналогично прошлому разу:


    call plug#begin('~/.vim/bundle') "Начать искать плагины в этой директории
    "Тут будут описаны наши плагины
    call plug#end() "Перестать это делать

    С этого момента у вас всё должно работать. Далее мы будем добавлять плагины меж этих строк по следующей схеме:


    Plug 'пользователь/репозиторий' "Берём эти данные с гитхаба
    "После чего перезагружаем файл настроек...
    "... и исполняем команду :PlugInstall в панели команд

    Есть и другие способы добавления плагинов в vim-plug и они подробно описаны на странице менеджера, но в них, чаще всего, нет нужды. Также, как вы могли догадаться, поиск плагинов осуществляется в общем случае Гуглом или этой прелестью. Также про них можно узнать из тематических форумов/сабреддитов и таких статей, как эта.



    Слишком сложно...



    Красота требует настройки


    Самая базовая и, вместе с тем, одна из самых важных модификаций для программы, в которой вы будете проводить более 90% своего рабочего времени — внешний вид. Если вы пользуетесь терминальным Вимом и уже настраивали консоль, то эти изменения должны отобразиться и на самом редакторе, но можно пойти и дальше. Начнём с выбора темы.


    Так наш подопечный (MacVim) выглядит сейчас:




    Выбор темы


    Для Вима силами волонтёров было написано немеренно готовых тем. Из большинства популярных редакторов их давно уже всех портировали. Как по мне, главная отличительная особенность Sublime Text — его тема Monokai, которую мы сейчас вероломно апроприируем.


    ...
    Plug 'ErichDonGubler/vim-sublime-monokai' "Добавьте это в список плагинов
    ...
    
    colorscheme sublimemonokai "Добавьте это НЕ в список плагинов

    Теперь вы можете презагрузить ваш файл настроек (или сам Вим), и насладиться раскулаченным добром. Аналогично вы можете поставить себе и другие темы, такие как Darcula, Solarized Dark и.т.д.




    Улучшенная строка состояния


    Теперь давайте настроим наш status bar. Основная идея состоит в том, чтобы красиво показывать важную информацию по аналогии с tmux и панелями в WM на экране, касающуюся редактирования текста. Для этого давайте поставим Airline:


    ...
    Plug 'vim-airline/vim-airline' "В список плагинов
    ...
    
    "Не в список плагинов
    let g:airline_powerline_fonts = 1 "Включить поддержку Powerline шрифтов
    let g:airline#extensions#keymap#enabled = 0 "Не показывать текущий маппинг
    let g:airline_section_z = "\ue0a1:%l/%L Col:%c" "Кастомная графа положения курсора
    let g:Powerline_symbols='unicode' "Поддержка unicode
    let g:airline#extensions#xkblayout#enabled = 0 "Про это позже расскажу

    Про Powerline мы поговорим далее, но главное, чего мы этим добьёмся, — секции строки состояния будут выделяться не прямоугольниками, а стрелками. Про Keymap мы поговорим в секции про интеграцию русского языка, но эта комманда просто скроет его индикатор из строки статуса (аналог останется в строке команд). Символ \ue0a1 — это красивая альтернатива "ln", но также мною был опущен процентный показатель конца файла, ибо мне он показался излишним.


    Вид Airline по умолчанию:



    Вид после нашего вмешательства:




    Шрифт и иконки


    Как видите, мы сделали только хуже. Проблема заключается в том, что вам нужно установить в ваш терминал или gui шрифты с поддержкой Powerline. Для первого воспользуйтесь настройками самой консоли, а для второго это командой:


    "16 вы можете поменять на нужный вам размер шрифта
    set guifont=имя_вашего_шрифта_в_системе:h16

    Но не спешите сейчас ставить полюбившийся вам шрифт из того списка. Во-первых, подобных шрифтов в природе больше и их можно патчить самому. Например, мой любимый — это Fira Code, который поддерживает лигатуры (о них можете почитать там же). Во-вторых, есть ещё один отличный плагин Devicons, который добавляет в Airline и Nerdtree (файловый проводник) удобные иконочки.


    ...
    Plug 'ryanoasis/vim-devicons' "Далее я про это напоминать не буду
    ...

    Но и они не работают.



    Для того, чтобы все наши красивости заработали нам нужен не просто пропатченный на поддержку Powerline шрифт, но и совместимый с Nerd Font, благо такая вариация Fira Code имеется. Тут от системы к системе последовательность действий будет отличаться, но на MacOS с brew этот шрифт ставится в два счёта:


    # В терминале
    brew tap homebrew/cask-fonts
    brew cask install font-firacode-nerd-font

    И подключим его так (в GUI. И да, "фура" тут намеренно):


    set guifont=Fura\ Code\ Light\ Nerd\ Font\ Complete:h16 "Это light версия

    Теперь все наши элементы кастомизации должны встать на место:




    Стандартные опции


    Таким образом мы осветили самые важные аспекты кастомизации внешнего вида Вим. Подробнее про работу этих плагинов можно почитать либо в их мануалах (через команду :help) или на их страницах на гитхабе (ищутся в Гугл по имени из списка плагинов). Далее будут указаны другие полезные команды, а после этого мы перейдём к следующей большой теме:


    set guioptions= "Отключаем панели прокрутки в GUI
    set showtabline=0 "Отключаем панель табов (окошки FTW)
    
    "Сам по себе number показывает справа номера строк
    "relativenumber - нумерацию строк относительно положения курсора
    set number relativenumber "А это гибридный вариант. Протестируйте все
    
    "wrap заставляет переносить строчки без их разделения
    "Соответсвенно nowrap рендерит строчки за границами экрана
    set wrap linebreak nolist "Данная вариация работает как wrap...
    "... но переносит строчки не посимвольно, а по словам
    
    "Предыдущий способ известен как soft wrapping
    "При желании вы можете заставить Вим насильно разделять...
    "... строчки в самом тексте вот так:
    set textwidth=80 "Где 80 стоит заменить на нужную вам длину строки
    
    set cursorline "А так мы можем подсвечивать строку с курсором
    
    "Если вы используете обычный терминальный Вим, а не NeoVim, то...
    "... для изменения курсора в разных режимах используйте это:
    set ttimeoutlen=10 "Понижаем задержку ввода escape последовательностей
    let &t_SI.="\e[5 q" "SI = режим вставки
    let &t_SR.="\e[3 q" "SR = режим замены
    let &t_EI.="\e[1 q" "EI = нормальный режим
    "Где 1 - это мигающий прямоугольник
    "2 - обычный прямоугольник
    "3 - мигающее подчёркивание
    "4 - просто подчёркивание
    "5 - мигающая вертикальная черта
    "6 - просто вертикальная черта
    
    set macligatures "Включает поддержку лигатур в MacVim
    "Лучше бы не поддерживал совсем


    Русский ферштейн?


    Наверное, самый главный отталкивающий фактор в освоении Вима, с которым сталкиваются все русскоговорящие программные инженеры — Русский язык. Не то, чтобы у меня была какая-то неприязнь к великому и могучему, но она есть у нашего редактора, причём ко всем языкам, отличным от Английского.


    Вим обходит системные драйвера клавиатуры и сам обрабатывает ввод. Хорошая новость состоит в том, что это делает его самым быстрым и отзывчивым редактором среди конкурентов. Плохая новость — он считывает не нажатие клавиши, а введённые символы. Результирует это в том, что команды нормального режима (и много что ещё) на других раскладках не работают.


    Лекарство для этой болезни искали люди давно, так как вечно ручками дёргать язык ввода неудобно. Когда появились более близкие к системе штуки, такие как gVim и MacVim, они тоже не справились (и не особо пытались). Поэтому на данный момент есть пара костылей:



    Langmap


    Наверное, при поиске решения в интернете, вы натыкались на строчки подобного характера:


    set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz

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



    Keymap


    Существует чуть более адекватный стандартный способ переключения раскладки:


    "Если вы используете обычную qwerty, то поменяте mac на win
    set keymap=russian-jcukenmac
    "Язык ввода при старте Вима - Английский
    set iminsert=0
    "Аналогично настраивается режим поиска
    set imsearch=0

    Теперь вам просто нужно при входе в редактор удостовериться, что системная раскладка — английский и… научиться переключать язык по <C-^>… Да, это сочетание клавиш можно переназначить. Нет, не на ту же комбинацию клавиш, что и системое переключение.


    Помимо того, что вам придётся привыкать к переключению языка разными командами в разных программах, он также не работает в режиме замены. Но это универсальный, кроссплатформенный способ, а как скрыть отображение текущего (и скорее всего единственного) Keymap мы уже рассмотрели.



    Xkb-switch


    Сие есть прекрасная консольная утилита для переключения раскладки в терминале. Сейчас мы в первый раз попробуем заставить Вим общаться с внешними программами. У Xkb-switch есть порты под три популярные операционные системы, но, как водится, здесь мы рассмотрим установку на MacOS. Для других систем вы можете найти инструкции на сайте плагина.


    # Давайте сначала скачаем саму программу
    git clone https://github.com/myshov/xkbswitch-macosx
    # Установка происходит простым копированием в директорию в $PATH
    cp xkbswitch-macosx/bin/xkbswitch /usr/local/bin/xkbswitch
    # Аналогично мы поступим с библиотекой-интеграцией с плагином
    git clone https://github.com/myshov/libxkbswitch-macosx
    cp libxkbswitch-macosx/bin/libxkbswitch.dylib /usr/local/lib/libxkbswitch.dylib

    А теперь победным маршем добавим эти строчки в конфиг:


    ...
    Plug 'lyokha/vim-xkbswitch'
    ...
    
    let g:XkbSwitchEnabled = 1 "Дёргаем рубильник

    И все ваши проблемы решены. В основном потому что мы это сделали заранее. Помните строчку из настройки Airline, упоминавшую Xkb-switch? По дефолту наш статус бар показывает номер текущей раскладки, но (по крайней мере у меня) это заставляло скроллинг в Виме безбожно зависать вплоть до полной остановки работы, поэтому мы это просто отключили.


    Теперь наш верный друг должен работать с разными раскладками как любой другой современный редактор. При переходе в режим вставки Xkb-switch будет переключать раскладку с английской, на последнюю, вами использованную и vice versa. Также он умеет автоматически адаптировать ваши сочетания клавиш под новые раскладки. Однако командный режим и режим замены снова за бортом.



    Интегрируем дифференцируя


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



    Размечтались...



    Slime


    Наверное, один из самых полезных плагинов для Емакса — это Slime. Суть его работы заключается в введении новой комбинации клавиш Ctrl-C-C, которой вы можете посылать куски кода в REPL вашего любимого языка программирования. Благо умельцы забрали это чудо к нам:


    ...
    Plug 'jpalardy/vim-slime'
    ...

    Теперь, когда вы выделите текст и настучите этот шорткат, Slime пойдёт искать терминал с работающим screens и спросит название вашей сессии и номер окна, после чего пошлёт в него ваш текст и исполнит. При желании, можете перенастроить её на работу с tmux и даже встроенным в Вим терминалом (да, в Виме есть терминал). Примеры перенастройки:


    "Для tmux
    let g:slime_target = "tmux"
    
    "Для обычного Вима
    let g:slime_target = "vimterminal"
    
    "Для Вима избранных
    let g:slime_target = "neovim"


    Jupyter


    От посылочек с кодом в общем случае, давайте перейдём к более узкому. Jupyter — это бывший iPython, который предоставляет очень удобную консоль для исполнения питоновских команд с поддержкой рендера графиков и изображений в matplotlib. У него есть встроенный редактор notebook и чуть менее встроенный lab, но оба — довольно печальное зрелише.


    Давайте сначала сгенерируем и настроим конфиг для… Нет, не для Вима, а для Jupyter:


    jupyter qtconsole --generate-config
    vim ~/.jupyter/jupyter_qtconsole_config.py

    Теперь найдите эту строчку


    #c.ConsoleWidget.include_other_output = False

    и раскомментируйте её, заменив False на True.


    А теперь добавьте это в конфиг уже Вима для установки Jupyter-vim:


    ...
    Plug 'jupyter-vim/jupyter-vim'
    ...

    Теперь вы можете, открыв ваш код на Python (или на другом поддерживаемом языке), разбить его на блоки (начало блока обозначается символом ## или #%%) и подключиться к Jupyter. Для этого вам его нужно сначала запустить:


    jupyter qtconsole &

    А в самом Виме вбить


    :JupyterConnect "Не в конфиге, а в редакторе

    Теперь по нажатию \X (если \ — ваш <localleader>) вы исполните в Jupyter блок кода, на котором у вас стоит курсор, а по нажатию \R вы прогоните весь файл. Больше сочетаний клавиш вы можете найти на сайте плагина.


    К сожалению, тут не всё так гладко. Сам плагин часто забывает скомпилировать свои команды, и его приходится вызвать костылями:


    nnoremap <leader>jc :call jupyter#Connect()<CR> "как пример

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


    Думаю, ему можно это простить, так как других альтернатив нет. Если у вас есть желание помочь его разработке и заработать социальные плюсы, то вы найдёте его код всё там же — на гитхабе.



    LaTeX


    Конечно, Вим можно использовать как средство написания кода, но он более универсален. Ответ "насколько" кроется в самом термине "текстовый редактор" — в нём можно редактировать текст (неожиданно, не так ли?). Это значит, что в нём можно написать курсовую или дипломную.


    В чём пишут такие типы документов и, в принципе, научные работы? Правильно, в LaTeX! Конечно, этой технологии можно найти ещё море применений, но для всех них можно использовать наш программисткий блокнот. Поэтому давайте скачаем и установим Vimtex.


    ...
    Plug 'lervag/vimtex'
    ...
    
    let g:tex_flavor = 'latex' "Уточняем какой Тех
    
    "Отключаем автоматическое открытие окна Quickfix
    let g:vimtex_quickfix_mode = 0

    Теперь, если вы войдёте в файл с расширением .tex и введёте <localleader>ll (или :VimtexCompile), то у вас скомпилируется проект, предупреждения и ошибки отправятся в Quickfix и Location списки, а также откроется системный просмотрщик pdf.


    Однако в MacOS её Preview не умеет автоматически обновлять документ при его изменении и на него приходится тыкать мышкой. В Линуксе очень любят программу Zathura, у которой схожие с Вимом элементы управления и есть возможность поменять цвета документа и элементов интерфейса, чтобы получить тёмную тему. Давайте её настроим:


    # Это пример установки на MacOS (не забудьте про XQuartz)
    brew tap zegervdv/zathura
    brew install zathura --with-synctex
    brew install zathura-pdf-poppler
    
    # Настраиваем плагины (требуется после каждой переустаноки)
    mkdir -p $(brew --prefix zathura)/lib/zathura
    ln -s $(brew --prefix zathura-pdf-poppler)/libpdf-poppler.dylib $(brew --prefix zathura)/lib/zathura/libpdf-poppler.dylib
    
    # И нам нужна эта зависимость
    # Но она замедляет инициализацию Vimtex
    # Так что выбор за вами
    brew install xdotool

    Теперь попросим Vimtex использовать zathura по умолчанию:


    let g:vimtex_view_method = 'zathura'

    С этого момента в Linux у вас должна по умолчанию открываться ваша новая программа для просмотра pdf. Однако в системе для любителей сорта макинтош такой важный функционал не завезли, поэтому вам придётся её запусткать ручками: сворачиваем Vim нажатием <C-z>, вводим zathura имя_файла.pdf & и возращаемся в Вим — fg.



    Если вы хотите такие же цвета, то добавьте эти строчки в ~/.config/zathura/zathurarc (учтите, что это инвертирует даже в вложенные изображения)


    set recolor true
    set recolor-darkcolor "#dcdccc"
    set recolor-lightcolor "#1f1f1f"


    Markdown


    К сожалению, у LaTeX есть несколько небольших проблем. Он слишком комплексный для относительно простых задач и довольно медленно компилируется. Но наши мольбы об идеале услышали боги вёрстки и сотворили такую прекрасную вещь как Markdown.


    Markdown (также известный как "та штука с гитхаба") — это очень простой язык разметки, который мановением волшебной палочки компилируется в HTML. Он очень удобен для написания больших текстов с незамысловатым форматированием (как эта статья). К счастью, фанатов у него много, поэтому и плагинов для Вима под него — море.


    Давайте рассмотрим плагин Livedown. Его главная задача — представлять из себя vimtex для markdown. По сочетанию клавиш он открывает ваш файл в браузере и далее продолжает его обновлять при каждом сохранении исходников. Но сначала вам придётся установить Nodejs и пакет для него:


    # Применимо к MacOS
    brew install node
    # Универсально
    npm install -g livedown

    А это добавьте в конфиг:


    ...
    Plug 'shime/vim-livedown'
    ...
    
    "Поменяйте сочетание клавиш на любое вам удобное
    nnoremap <leader>ld :LivedownToggle<CR>

    Теперь при введении команды <leader>ld (или ваш вариант) вы можете включать плагин или выключать. Кстати, он также умеет отображать HTML файлы, но он всё ещё думает, что они на markdown написаны, так что ожидайте некоторые "странности" вёрстки.


    Как уже упоминалось, плагинов для markdown в Виме — великое множество. Мне также довелось пощупать чудо по имени Markdown-preview. Он исполняет те же функции, что и Livedown, но умеет скроллить скомпилированный текст в зависимости от положения вашего курсора и закрывается при переключении буффера (а не по выходу из редактора). Мне лично он понравился меньше, но это уже вкусовщина.



    Блиц раздел


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



    Комментарии про отладку



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


    Это не является минусом конкретно Vim, так как в том же Sublime Text дела обстоят не лучше. Хотя вам никто не мешает просто научиться ими пользоваться из консоли. Туториалов на эту тему полно, и сам процесс несложный.


    Если вы заложник яблока, то используйте гайды для gdb, но сами туда подставляйте аналогичные команды из lldb с помощью этого сайта.



    Уход за проектом


    В Виме есть встроенная команда :make, которая ведёт себя как одноимённая программа для терминала. Плюс этого подхода в том, что она вас носом проведёт по всем предупреждениям и ошибкам, указывая на то, что её беспокоит (это поведение настраивается).


    Про настройку проверки синтаксиса и непосредственного написания кода уже написано много статей, но могу посоветовать установить YouCompleteMe для автодополнения по табу, отключить у него проверку синтаксиса и поставить для неё Neomake:


    ...
    Plug 'Valloric/YouCompleteMe'
    Plug 'neomake/neomake'
    ...
    "Не забудьте, что YCM нужно компилировать после кадого обновления
    "Например: python3 ~/.vim/bundle/YouCompleteMe/install.py --clang-completer
    
    let g:ycm_show_diagnostics_ui = 0 "Обрубаем YCM
    
    "А вот пример настройки работы Neomake
    let g:neomake_cpp_clang_maker = {
       \ 'exe': 'clang++',
       \ 'args': ['-I/usr/local/include/wx-3.0', '-std=c++17'],
       \ }


    Прыжки по тегам


    У Вима есть встроенная комбинация клавиш <C-]>, который позволяет вам перейти к имплементации выделенного термина. Однако для его работы нужны те самые тэги. Сгенерировать их можно терминальной командой ctags:


    # В корне проекта прогоните это
    ctags -R &

    Если вам нужно перейти к объявлению этого термина, то вам поможет (у вас должен быть установлен YCM):


    "Наведите курсор на нужный термин и введите команду:
    :YcmCompleter GoToDeclaration

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



    Асинхронные команды


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


    Вим — однопоточная программа (ему можно, у него амбиции ниже). Поэтому, если на него слишком много плагинов, то он поползёт со скоростью улитки. Но начиная с версии 8 (ну и в NeoVim это тоже есть) в него добавили API для асинхронных вызовов. Теперь ваш линтер, работающий в реальном времени, не будет замедлять сам процесс редактирования текста.


    Давайте в качестве нашего подопечного возьмём плагин AsyncRun. Он умеет запускать асинхронно терминальные программы как в Vim 8, так и в NeoVim (ну и всех их разновидностях).


    ...
    Plug 'skywind3000/asyncrun.vim'
    ...
    
    nnoremap <F3> :AsyncRun ctags -R<CR>

    Теперь по нажатию клавиши F3 вы будете прогонять рекурсивно в директории проекта ctags. Вы всегда можете посмотреть вывод запущенной через AsyncRun программы в окне Quickfix. Умышленно убить программу в заднем фоне можно с помощью команды AsyncStop.


    Соответственно, вызывать zathura можно также асинхронно:


    :AsyncRun zathura mew.pdf


    Интеграция с Git


    Человечеством ещё не было придумано более удобного способа пользоваться Git, чем через терминал. Многие IDE пытались бороться с такой тенденцией, но либо упрощали процесс настолько, что терялись важные фичи, либо усложняли до безумия. Но для фанатов делать всё из-под Вим таки нашёлся плагин Fugitive, просто оборачивающий всеми любимые команды.


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


    command! -bang -nargs=* -complete=file Make AsyncRun -program=make @ <args>


    Заключение


    Главная задача этой статьи состояла не сколько в доказательстве того, что IDE откровенно плохи, а в том, чтобы показать вам, что Вим тоже имеет порох в пороховницах. Если вы потратите время на настройку окружения под него, то получите более быструю, эффективную и понятную рабочую среду. И да, пожалуйста, не пытайтесь в комментариях доказать, что какой-то стиль редактирования лучше или хуже других. Не докажете.


    Надеюсь, что вы хорошо провели время, читая эту статью (написанную в NeoVim) и...



    Источники

    Ссылки на все плагины уже указаны в статье, но


    1. Мой конфиг, на котором основанна эта статья можно найти тут
    2. Ещё раз упомяну VimAwesome
    3. Также многие проблемы были решены пролистыванием Reddit
    4. В вики тоже много полезных лайфхаков для решения проблем без плагинов
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 248

      +2

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

        +7

        Запустите в одном окне терминала Вим, а в другом — дебаггер и перетащите их в разные окна

          0

          *на разные экраны

            0
            Но в этом случае будет просто два несвязанных окна, да? В любой нормальной IDE исходники и отладчик обладают связью, помогающей эффективно работать: подсветка, переход к исходнику и обратно и тому подобное.

            И кроме отладчика, как бысть с остальными данными? В работе у меня обычно на отдельном мониторе помимо отладчика: список предупреждений/ошибок, результаты поиска, список использований и т.п. Конечно, можно в отдельных окнах пооткрывать терминалы и там делать например grep, но это всё медленно будет до ужаса и без обратной связи.
              +1
              Интеграция отладчика что в Вим, что в Саблайм (не знаю как сейчас, но года два назад у меня это не вышло) всегда была проблемной. Есть плагины, которые пытаются его интегрировать с GDB и LLDB, но даже если они у вас начнут работать, вы всё равно будете ограничены сплитами и табами.

              Сейчас даже GUI реализации Вима при создании нового окна просто открывают новый инстанс редактора. Подобное решение происходит из того, что он — программа консольная, из чего следуют эти ограничения (при открытии нового виртуального терминала вы тоже, считайте, входите в новую сессию). Полная поддержка нескольких мониторов появится, когда разработчики начнут уделять больше времени GUI версиям.

              Пока единственное решение проблемы, которое я вижу, — сделать плагин, который будет дампить данные об предупреждениях и ошибках (и прочее) во временные скрытые файлы и открывать их в новой сессии Вима, но подобных готовых решений вроде нет.

              Можно также купить широкоформатный монитор или привыкнуть к идеологии минимализма, но это не решение самой проблемы
                +1

                Ещё как вариант можно растягивать окно на два монитора :)

                  +1
                  В последнее время с этим есть некоторый прогресс. Попробуйте termdebug. Он слегка сыроват, у меня иногда падает если запускать из gvim, но в консоли работает отлично.
                    0

                    Это просто чёрная магия. Даже на MacOS работает адекватно (хоть и с предупреждениями).

              +3
              Но чтобы заменить полноценную IDE в моей вселенной ему надо научится эффективно использовать мульти-мониторную конфигурацию, когда например исходники программы в одном рабочем столе, а стек-трейс и содержимое переменных к нему в другом. Как у него с этим?


              vim — не IDE, а программистский настраиваемый редактор.
              Так же как и Sublime, Atom и т.п.

              И с просмотром переменных у него так себе.

              У него все хорошо с автодополнениями, проверкой синтаксиса и ее подсветкой, шаблонами/сниппетами, подсветкой и закрытием тегов, скобок и парных операторов.

              Но интерактивная отладка — это не сильный конек подобных инструментов.
                0

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


                По крайней мере, хаскель в виде я пишу с большим удовольствием, чем C++ в clion, даже если нормировать на любовь к языкам.

                –4
                Я вот всегда замечал, что программисты как-то делятся на тех, кому надо писать буквы и тех, кому надо разрабатывать продукт. Для тех, кому надо строчить текст vim всегда был (и будет) лучшим решением. Но когда начинается работа с UI, отладка, работа с БД, рефакторинг и т.д. — vim проигрывает вчистую.
                  +1

                  Это не так. К тому же — что значит работа с UI? Рисовать формочки в дизайнере?
                  Ну, так извините — разработка не ограничивается фронтом. Есть еще бекендеры, которым УИ до одного места. И системные инженеры, которые фигачат инфраструктурный код… Им реально нужен редактор + расширенный функции по рефакторингу и автоподстановкам. БД — да, но там удобнее отдельные инструменты (типа DataGrip).

                    +1

                    И как с помощью vim сделать рефакторинг по выделению интерфейса из класса?

                      +1
                      И как с помощью vim сделать рефакторинг по выделению интерфейса из класса?


                      Ваш вопрос смысла лишен.

                      vim — это база, основа. На котором уже надстраиваются плагины под конкретную ситуацию, под конкретный язык.

                      Рефакторинг с Go и vim, к примеру, делается с использованием инструментов golang.org/x/tools/cmd/guru и golang.org/x/tools/cmd/gorename. С помощью планига go-vim эти инструменты интегрируются с vim и — вуаля, рефакторите как хотите.

                        +1
                        vim — это база, основа.

                        Вот именно


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

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

                          +2
                          И вот сборка из этих плагинов будет иметь меньше фич, чем IDE, заточенная под конкретный язык. Суровая правда жизни (((


                          1) Это касается только массово распространенных языков. Для тех, что еще не стали широкораспространенными и/или никогда не станут таковыми — IDE или не существуют или они убоги. Как пример, Go. При всём многолетнем уже хайпе/победоносном шествии Go в серьезных/тяжелых проектах нормальная поддержка в IDE появлась только в этом году. До этого vim (с плагинами конечно) предлагал ровно такой же функционал что и предлагали IDE.

                          2) IDE дают это всё далеко не бесплатно. И в смысле потребных им ресурсов. А иногда и в смысле денег. Именно поэтому на ноутбуке в дороге я пользуюсь vim, а на мощном десктопе — Jetbrains IDE.

                          3) Из принципиальных преимуществ IDE — пошаговая отладка, видеть/менять переменные вживую. Но, скажем, в моей ситуации — при отладке микросервисов, логи куда как более полезны, чем брейкпойнты в многопоточном коде. А всё кроме этого в vim/Atom/Sublime/emacs — уже есть.

                            –1
                            Это касается только массово распространенных языков.

                            Есть такой момент.


                            Для тех, что еще не стали широкораспространенными и/или никогда не станут таковыми — IDE или не существуют или они убоги.

                            Наверное настанет такой момент, когда плагин для IDE будет написать легче, чем плагин для vim, но вроде пока не настал.


                            Именно поэтому на ноутбуке в дороге я пользуюсь vim, а на мощном десктопе — Jetbrains IDE.

                            Если вы действительно используете vim на ноутбуке потому, что IDEA слишком прожорливая, то имеет смысл начать копить на новый ноутбук с быстрым процессором и большим количеством оперативной памяти. Хотя вроде из моего опыта следует, что i7 U восьмого поколения и 16 гигабайт оперативной памяти в общем хватает.


                            Важный вопрос. Какие плагины у вас установлены в Jetbrains IDE?

                              +2
                              Если вы действительно используете vim на ноутбуке потому, что IDEA слишком прожорливая, то имеет смысл начать копить на новый ноутбук с быстрым процессором и большим количеством оперативной памяти.


                              Спасибо за подсказку, но и без умных ваших советов — у меня MacBook Pro свежий в околотоповой конфигурации.

                              Дело в расходе аккумулятора при автономной работе.
                              Да, я знаю про режим экономии электроэнергии у IDE Jetbrains. Но при его включении IDE превращается практически в тыкву — мало что может, чего ожидаешь получить от современной IDE.

                              Важный вопрос. Какие плагины у вас установлены в Jetbrains IDE?

                              Дефолтные в среде Jetbrains IDE для Go и EmmyLua и Vim-эмулятор. Вроде все.
                                0
                                Спасибо за подсказку, но и без умных ваших советов — у меня MacBook Pro свежий в околотоповой конфигурации. Дело в расходе аккумулятора при автономной работе.

                                И получается, что вам лучше долгое время работать в виме, чем какое-то недолгое в идее. Из этого я делаю вывод, что по фичам у Идеи и вима получается плюс минус паритет. А почему когда есть мощный десктоп вы предпочитаете Идею? Что там такого хорошего?

                                  +1
                                  А почему когда есть мощный десктоп вы предпочитаете Идею? Что там такого хорошего?


                                  Ибо «хочу все знать». Любопытство.

                                  Ну и куча интересных причин — Windows на десктопе (MacOS на шустром десктопе — это слишком радикально и дорого; Linux же, извините, подключивает, пытался неоднократно — то принтер отваливается, то видеокарта), а vim на Windows не очень комфортен; и любопытство, чтобы все же самому сделать выводы, а не просто начитаться чужих мыслей на форумах и только на этом основании «спорить о вкусе устриц с теми, кто их ел», но для этого нужно и то и то попробовать самому…

                                  Кстати, именно потому что я лично опробовал оба варианта длительное время — могу точно сказать — лишь совсем недавно механизмы подсказок (auto-completion) и пошаговая отладка в IDE Jetbrains для Go стали принципиально удобнее, чем в vim. Еще только в том году у IDE Jetbrains преимуществ не было от слова вообще. Но я надеялся и ждал, веря, что та фирма веников не вяжет.

                                  P.S.:
                                  Кстати плагины Go для vim тоже развиваются.
                                    0

                                    JetBrains до сих пор не могут нормальную интеграцию с докером сделать.

                        0

                        Язык какой? Или сферический рефакторинг в вакууме? Ну, так извините — не любой IDE позволит рефакторить код на любом языке.

                          0
                          Язык какой?

                          Давайте Джаву, мне она актуальна

                            +2
                            Давайте Джаву, мне она актуальна

                            Java как раз неудачный пример, один из немногих.
                            Под Java уже лет 20 как целенаправленно точит свой софт Jetbrains. А их IDE — одни из лучших на планете.
                            Решения есть и для Java, конечно, eclim.org/vim/java/refactor.html
                              0
                              Java как раз неудачный пример, один из немногих.

                              К джаве нужно добавить ещё C#, C++, Kotlin, Groovy, Scala, TypeScript, возможно JavaScript, не уверен. Подозреваю, что ещё в этот список попадут Go, Ruby и Python.


                              Под Java уже лет 20 как целенаправленно точит свой софт Jetbrains. А их IDE — одни из лучших на планете.

                              Ну во-первых не только под Java, а во вторых кроме JetBrains есть ещё и другие конторы )))


                              Решения есть и для Java, конечно

                              Конечно есть. И они, увы, хуже того, что есть в IDE.

                                +1

                                Вот Жаба — чуть ли не самый лучший пример превосходства IDE над вимом. Шарп, наверное, на втором месте. Благодаря дизайну языка.


                                Чуть шаг в сторону от Джавы — всё становится хуже. Даже для такого старого и популярного языка как C++ выгоды IDE уже не так очевидны. Разобрать 100500 макросов и шаблонов, понять в контексте какого шаблонного значения вы хотите сделать поиск или рефакторинг — и добро пожаловать в ад. Особенно хорошо это заметно при взгляде на VS — вроде бы, одна и та же IDE, а работа с шарпом и работа с плюсами — две большие разницы.

                                  +1
                                  Чуть шаг в сторону от Джавы — всё становится хуже. Даже для такого старого и популярного языка как C++ выгоды IDE уже не так очевидны.

                                  Для С++ IDE дело сдвинулось с мёртвой точки только тогда, когда появился clang, тут дело как раз в том, что язык старый и IDE для него, как я заметил, раньше больше акцентировались на отладке и кодогенерации.


                                  А чем новее язык, тем проще для него сделать IDE, вот как-то так выходит.

                                    0

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


                                    Дело именно в языке. Не хочу умалять труд гениев из JetBrains, но Ява видимо хорошо устроена для IDE.

                                      0
                                      Не знаю, как сейчас (сам вимоид), но лет 5 назад студия пыталась много чего поддерживать.

                                      clang много сделал для C++, да. До его появления в студии и того не было. А сейчас вон можно на ходу макросы вычислять.


                                      Дело именно в языке.

                                      Да, именно в языке. С++ жёсткая штука.

                  +1

                  airline->lightline хотя бы потому что писать свои дополнения к нему проще
                  YouCompleteMe->coc проще собирается-устанавливается.
                  Про Powerline говорить уже нет никакого смысла, он скорее мёртв, чем жив, проект со шрифтами только и остался.


                  let &t_SI.="\e[5 q" "SI = режим вставки
                  let &t_SR.="\e[3 q" "SR = режим замены
                  let &t_EI.="\e[1 q" "EI = нормальный режим

                  Хорошо, но имеет смысл в контексте эмулятора терминала и/или мультиплексора. Для tmux это всё несколько забавней выглядит.


                  Не увидел let mapleader=","


                  Для консольного vim:


                  silent !stty -ixon                                                             
                  autocmd VimLeave * silent !stty ixon   

                  просто потому что я привык по C-s сохранять буфер (привычка вредная, но что есть, то есть), а не фризить терминал.

                    0
                    airline->lightline хотя бы потому что писать свои дополнения к нему проще

                    Имхо потому что lightline легче.
                    YouCompleteMe->coc проще собирается-устанавливается.

                    Имхо github.com/Shougo/deoplete.nvim потому что асинхронность.
                    Сделан для neovim, но с плагинами дополнительными, обеспечивающими совместимость, работает и в vim 8.1 — лично использую.
                    P.S.:
                    YouCompleteMe сложно устанавливать только под Windows без WSL.
                    На Linux/FreeBSD/WSL — устанавливается по инструкции с полпинка.
                      0
                      Имхо github.com/Shougo/deoplete.nvim потому что асинхронность.

                      Я за coc, потому что https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions ну и не заметил проблем с асинхронностью. Короче, вкусовщина и YCM уже не торт.


                      YouCompleteMe сложно устанавливать только под Windows без WSL.

                      На маке там тоже квест был.

                        0

                        Как coc с ale совместно работает? Посмотрел на то, как coc работает с LSP интересных мне языков — похоже, функциональность пересекается.

                          0

                          Да вроде нормально. Проблем пока не замечал.
                          Да и то сказать, проверить же не сложно, не ломая свой конфиг. Я тестирую так:
                          vim -U ~/.testing_vimrc
                          а в том конфиге уже свои пути для Plug и прочий &runtimepath.

                    +2

                    Было бы здорово, если бы кто-нибудь про emacs написал подобное.

                    +2
                    Literate .vimrc
                    Сначала, у меня был один .vimrc to rule them all, но когда плагинов становится больше дюжины, становится сложно отслеживать настройки. Некоторые опции (deoplete) надо было настраивать до загрузки плагинов, некоторые — после. Что-то настраивалось через `let g:...`, что-то через `call plugin#function(...`. Потом я разбил на много файликов, отдельно для каждого плагина и source'ил их из .vimrc — стало легче читать, но сложнее редактировать. С Literate .vimrc стало возможным накидать markdown-якорей по конфигу, заголовков, нумерованных списков, e.t.c., а потом просматривать всё в браузере через markdow-preview.
                      +4
                      Странно, что чем больше практикуешься в программировании, тем меньше стоит вопрос скорости написания кода. Ведь программирование это о решении проблем. Фризы IDE не вызывают какого-то особого раздражения и желания переходить на текстовые редакторы.
                        +6
                        Странно, что чем больше практикуешься в программировании, тем меньше стоит вопрос скорости написания кода. Ведь программирование это о решении проблем. Фризы IDE не вызывают какого-то особого раздражения и желания переходить на текстовые редакторы.


                        Дело не в скорости.
                        Дело в комфорте.

                        Фризы IDE тянут за собой спотыкание мысли.

                        P.S.:
                        Более 30 лет в программировании.

                        vim освоил лет 5 назад для оптимизации работы с клавиатурой/мышью на нотубуках в дороге и для снижения риска RSI (отказ от мыши так как не всегда удобный стол, а тач-пад запястьями задеваешь; меньше тянуться к клавишам-модификаторам, меньше выкручивать пальцы)

                          +2
                          Фризы IDE не вызывают какого-то особого раздражения и желания переходить на текстовые редакторы.

                          P.P.S.:
                          Разные инструменты для разных целей:

                          На мощном десктопе использую IDE Jetbrains.
                          В дороге при питании ноута от аккумулятора использую vim. На серверах удаленно — разумеется тоже vim (причем даже можно и без плагинов, голый дефолтный vim)

                          Да, я в курсе, что у IDE Jetbrains есть режим экономии электроэнергии. Но при этом отключается значительная часть функционала, того что и превращает продукты Jetbrains в настоящую полноценную крутую IDE.

                          0
                          Фризы IDE не вызывают какого-то особого раздражения и желания переходить на текстовые редакторы.

                          А меня подбешивает, когда IDE подвисает на 1-5-10 секунд из-за того, что пытается проанализировать недописанный (и потому некорректный) код.


                          Правда, vim на плюсах тоже так себе ведёт, у него там даже подсветка ломается периодически.

                            +2
                            Правда, vim на плюсах тоже так себе ведёт, у него там даже подсветка ломается периодически.


                            Просто откройте для себя асинхронность и замените старые синхронные плагины на новые асинхронные.

                            Это сравнительная новинка в vim. Возможно, что ваши плагины еще под vim 7 написаны, где не было асинхронности.

                            После перехода на современные реинкарнации плагинов раздражающая вас в vim проблема (что и меня раздражала) — исчезла.

                              0
                              Просто откройте для себя асинхронность и замените старые синхронные плагины на новые асинхронные.

                              Я про саму синтаксическую подсветку, встроенную в vim. Или её нынче тоже можно заменять на плагины?

                                0
                                arakashic/chromatica.nvim для neovim и jeaye/color_coded для vim решают проблему подсветки синтаксиса для C++.

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

                            Это?
                            github.com/Shougo/deoplete.nvim
                            Если новый vim, тот, что с поддержкой асинхронности.
                              0
                              Это?
                              Да, похоже на то, что нужно! Но почему-то кажется, что «новый vim, тот, что с поддержкой асинхронности», уверенно движется в сторону Visual Studio с каким-нибудь Visual-Assist, судя по видеоскриншотам по ссылке. Если бы не сказали что это vim, подумал бы, что какой-нибудь привычный современный IDE, а там любой дурак работать сможет, ну типа меня. А вообще хотелось бы как раз расширить кругозор, вкусить прелестей особого пути vim, не такого как у всех, более продуктивного и по итогу удобного (когда поймешь и проникнешься, естественно).
                                +1
                                Если бы не сказали что это vim, подумал бы, что какой-нибудь привычный современный IDE, а там любой дурак работать сможет, ну типа меня.

                                Нет. Он не туда движется. В последних версиях добавлена асинхронность, встроенный менеджер плагинова, собственные терминалы…

                                Но чистый vim — очень скромен по внешнему виду.

                                Вам придется самому его кастомизировать, чтобы получить то, что вы упоминаете. Это не сам vim — это всё его плагины. Само ядро vim реализует только базовый функционал, он используется как фундамент для планинов.

                                Кстати, рекомендую статью Ian Langworth. Vim спустя 15 лет и полезные комментарии под ней.

                                Там у автора больше опыта и более полезная подборка.

                                В этой же статье, под которой мы вами пишем свои комментарии — часть советов базируется на устаревших технологиях. Хотя отмечаю целеустремленность автора этой статьи и объемный и хорошо организованный материал.
                              +1
                              Сколько читаю, до сих пор не понял, как в vim вызвать автодополнение при наборе текста, какой командой?

                              Ctrl-X Ctrl-O, например, и не забываем про то, что в виме документировано практически всё:
                              :he ins-completion

                                0

                                Попробуйте https://github.com/neoclide/coc.nvim — всё перечисленное в нем есть, настраивается легко.

                                +1

                                Напоминает сборку опенстека руками. :-)
                                Думаю, vim пользовался бы куда большей популярностью, если бы были готовые сборки для широко распространенных задач. Для большинства хватает настроек по умолчанию, а остальные легко затюнят под себя небольшие мелочи. Делать же каждому вот это вот from scratch — ну, такое себе…

                                  +1

                                  Готовые сборки есть. Например, https://github.com/SpaceVim/SpaceVim

                                    –2
                                    Думаю, vim пользовался бы куда большей популярностью, если бы были готовые сборки для широко распространенных задач.


                                    Их полным-полно.

                                    То, что лично вы о них не знаете — совсем не означает, что таковых нет.

                                    0

                                    Тоже раньше пользовался vim-ом. Как на linux, так и на windows. На винде сейчас использую редактор far manager-а. Удобная быстрая отзывчивая штука, и совсем не требует настройки.

                                      0
                                      Тоже раньше пользовался vim-ом. Как на linux, так и на windows. На винде сейчас использую редактор far manager-а. Удобная быстрая отзывчивая штука, и совсем не требует настройки.


                                      Голый без настройки FAR?
                                      Голый vim тоже умеет быть нормальным простым редактором, когда он без настройки.
                                        0

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

                                          0
                                          Но в far как в файловый менеджер в связке с текстовым редактором лично для меня закрывает необходимость ставить vim.


                                          Дык согласен.
                                          И практикую тоже.

                                          И есть знакомые, что прямо таки в FAR и занимаются разработкой.
                                            –1

                                            В виме для есть netrw, некоторые меняют его на другие, например, nerdtree.


                                            У меня vim-dirvish как минимальный файл браузер и vim-eunuch для простых операций над файлами. А так, в-основном, fzf для удобного переключения между файлами/буферами.

                                              0
                                              Половину как раз знаю и использую в vim.

                                              Но FAR намного более удобен как файловый мендежер — ибо он для этого и рожден.

                                              Я даже задумывался — а почему собственно большому числу людей (и моих знакомых и мне) FAR столь удобен как замена IDE, при том, что и близко нет функционала IDE.
                                                +1
                                                А я в качестве эксперимента решил попробовать Defx от известного в узких кругах Shougo, да так на нём и остался. Настроил, что на вид как Nerdtree, но в плане производительности намного шустрее, с Nerdtree у меня Vim местами прямо тупил.
                                                Теперь тестирую Denite от него же в качестве замены FZF и Bufergator.
                                                  +1
                                                  Выглядит так:

                                              +1

                                              vim ценен не тем, что он текстовый редактор, а тем, что он модальный текстовый редактор. Сравнивать vim и фаровский редактор, да ещё в разрезе лучше/хуже, ну такое себе.

                                                +1

                                                Что такое "модальный редактор"?

                                                  +1
                                                  Что такое «модальный редактор»?

                                                  Речь о режимах работы vim, видимо.
                                          +2
                                          Оффтоп: КДПВ из замечательной игры Hyper Light Drifter.
                                            0

                                            О да, исследуя ее мир я впервые почувствовал нечто, чему после некоторых поисков нашел название — Моно но аварэ, собственно оттуда и начался интерес к японской эстетике

                                            –1

                                            Спасибо за отличную статью, много нового узнал.


                                            Но пожалуйста, пишите комменты в коде на английском. Использовать национальные языки в программировании/конфигурировании — это ужасно.

                                              0

                                              Ничего ужасного, чистая вкусовщина. Мне, например, нравится — выделяет комментарий даже без цветовой разметки. И вообще, билингвизм — наше достоинство.

                                                –1

                                                Не совсем вкусовщина. В команде всегда есть куча иностранцев, не владеющих языком. А если их нет, то наверно компания очень маленькая и деревенская. Поэтому комменты на родном языке и есть признак местечковости.


                                                Кстати, билингвальность — это немножко другое. Это не про знание двух языков, а про владением ими с детства.

                                                  –1
                                                  Не совсем вкусовщина. В команде всегда есть куча иностранцев, не владеющих языком. А если их нет, то наверно компания очень маленькая и деревенская.


                                                  Отнюдь.
                                                  Полагаете, скажем, в Яндексе на английском ради 0,01% инстранных сотрудников говорят.
                                                    –2

                                                    Локализация комментариев в коде. Лекция Яндекса


                                                    Но даже если не брать во внимание проблемы Яндекса, а говорить о небольших проектах. Ну не знаю, мещанство это какое-то. Безкультурие чтоли. Это не объяснить, это чувствовать надо.

                                                      +1
                                                      Первая же строчка по вашей ссылке:

                                                      В процессе выхода на международный рынок с API Карт мы решили отказаться от комментирования кода на русском языке.


                                                      Было бы странно, если бы они этого не сделали при выходе на международный рынок. Ибо там же написано следующее во втором предложении:

                                                      При этом на основе комментариев формируются справочники сервиса, которые затем публикуются у нас на портале


                                                      Однако «отказаться от комментариев на русском» как бы намекает — что комментарии на русском в Яндексе вполне себе по-умолчанию/норма.

                                                      Ну не знаю, мещанство это какое-то. Безкультурие чтоли


                                                      Да ладно.

                                                      Было бы интересно поглядеть на ваши глаза, когда вы пытаетесь понять по-английски фразы специфической предметной области типа «вычет на детей от налога с доходов физических лиц».

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

                                                      • Для тренировки в английском в собственном личном проекте — да, это можно понять.
                                                      • Когда это действительно нужно коллегам, не знающим русский, — да это логично.
                                                      • Но когда вы вносите в проект, на 100% разрабатываемый русскоязычной командой, дополнительные сложности, создаете риски недопонимания, только потому, чтобы кому-то доказать, что вы не деревня — неправильно это как-то.
                                                        –3
                                                        чтобы в проекте со 100% русскоязычными разработчиками кому-то доказывать, что вы не деревня, гм… а вы уверены, что вами не манипулируют?

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


                                                        Вы уверены, что когда вас просят не мочиться на людях, вами не манипулируют? Потому что очень удобно мочиться на траву с тротуара, когда приспичило, а не рисковать и терпеть до дома. Зачем показывать, что вы не деревня и не мочитесь на людях? Кому вы хотите пыль в глаза пустить?




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


                                                        Так вот у программирования тоже есть культура. И культурный человек — это человек, который ведет себя культурно даже там, где это другие не видят. Ему не нужно обоснование "ну ведь у нас нет иностранцев". Потому что культура — это не Потёмкинские деревни.

                                                          +1
                                                          Так вот у программирования тоже есть культура. И культурный человек — это человек, который ведет себя культурно даже там, где это другие не видят. Ему не нужно обоснование «ну ведь у нас нет иностранцев». Потому что культура — это не Потёмкинские деревни.


                                                          Слабая аргументация.
                                                            0

                                                            Вы так думаете? По моему, лучше не скажешь...

                                                              0
                                                              Вы так думаете? По моему, лучше не скажешь...


                                                              Подробно что такое культура и бескультурие в программировании рассказал рядом:
                                                              habr.com/en/post/468265/#comment_20693581
                                                            +1
                                                            Так вот у программирования тоже есть культура.


                                                            Культура в программировании не та, что вам кажется. Это не стремление доказать, что то что ты может писать «как-то по-международному». Ибо программирую больше 30 лет — знаю.

                                                            Писать код/комментарии, которые коллеги смогут понять однозначно — это да, это культура программирования.

                                                            Но писать не так чтобы коллеги максимально однозначно понимали — это как раз безкультурие в программировании.

                                                            Чтобы там не говорили, что программист должен знать английский — все же большинство знает его весьма средненько-посредственно.

                                                            Если проект международный — да, тут нужно только на английском, не важно как ты его знаешь. Деваться некуда. Имеем риск косяков, но все равно нужно.

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

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

                                                            Если комментарий относится к предметной области, а не непосредственно к кодированию — это запросто может быть нетривиальная фраза, которую вам даже на родном языке будет непросто сформулировать и непросто на родном понять.

                                                              +1

                                                              Подтверждаю, работаю в Германии с немецкими коллегами. Английский у меня лучше немецкого, но пусть они лучше говорят и пишут на родном им немецком — понять намного проще. Да и им мой более слабый немецкий проще понимать, чем более продвинутый английский.

                                                      0
                                                      Не совсем вкусовщина. В команде всегда есть куча иностранцев, не владеющих языком.

                                                      Мы здесь таки в контексте. На русском сайте. Эту статью читают только люди, хорошо владеющие русским.


                                                      Кстати, билингвальность — это немножко другое. Это не про знание двух языков, а про владением ими с детства.

                                                      Говорят, даже минимальный уровень знакомства с другим языком бывает полезен. Расширяет кругозор и число идей, которые могут придти в голову. Скажем, в русских сказках нет лис-самцов. И мультик "губка Боб" (про мальчика) в России бы никогда не сняли. Потому что лиса и губка в русском — женского рода. Например.

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

                                                        Ну это очевидно. Язык отражает культуру. Изучение языка, даже удаленное от страны, — погружение в культуру.

                                                      +2

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

                                                        0

                                                        Нет никаких объективных причин упрекать в использовании русских комментариев на русском сайте, в русской статье. Об этом был мой комментарий.


                                                        Когда разговор об общем коде или общении в (хотя бы потенциально) интернациональной компании — другое дело. Сам в такой работаю, всегда топлю за английский.

                                                          0
                                                          Нет никаких причин не писать комментарии на английском. И есть причины не писать их на русском. Нельзя предсказать будущее, нельзя гарантировать, что ваш код никогда не попадёт на глаза нерусскоязычному. А если даже и не попадёт, так что с того?


                                                          Дык легко найти причины:

                                                          Уровень познаний в английском у наших программистов редко когда очень уж хороший.

                                                          Да, нужно знать, «язык профессии».

                                                          Однако фактически:

                                                          Один плохо знающий выразил свою мысль неоднозначно на неродном. Второй плохо знающий эту мысль понял еще более криво.

                                                          А если комментарий не про само программирование, а про предметную область — ситуация усугубляется: можно и на родном сидеть и тупить над фразами типа «вычет на детей с налога на доходы физических лиц»

                                                          А с английским вероятность получить полное искажение смысла как в игре «Испорченный телефон» — довольно высока.
                                                      +1

                                                      Оставлю здесь ссылку на проект с годной сборкой вима:
                                                      https://spacevim.org/
                                                      Вдруг кому-то пригодится.

                                                        0

                                                        Спасибо за хорошую статью и популяризацию хорошего редактора!


                                                        Лет 7-8 сидел на (нео)виме, до сих пор им пользуюсь. Justinmk, tpope, junegunn и многие другие — очень им благодарен за их труд...


                                                        Пару месяцев назад решил-таки попробовать emacs+evil. Несмотря на все его (для меня незначительные) косяки, радуюсь до сих пор как ребёнок. :D После Vimscript, elisp — просто счастье. Fugitive — это хорошо, но Magit — это Magit :D Projectile, опять же. По ощущению, всё, чего мне не хватало в виме, есть в emacs. Жаль, что их нельзя как-то объединить.


                                                        Человечеством ещё не было придумано более удобного способа пользоваться Git, чем через терминал.

                                                        Тоже так думал, пока Magit не попробовал. После него обратно в консоль, вообще, не тянет.

                                                          0
                                                          У меня были попытки перейти на Emacs, но так и не вышло. Я не пользуюсь табами, но обожаю иметь множество открытых окон редактора. Emacs при создании нового фрейма сбрасывает почти все настройки — остаётся только тема и то, что у вас получилось впихнуть в default-frame-alist…

                                                          Я не говорю, что там нельзя это сделать, но мне было лень в этом разбираться.
                                                            –1

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

                                                            +1
                                                            Ну раз холиварить… Emacs — хороший редактор, но только для тех, кто готов потратить недели (или месяцы) на его изучение и конфигурацию. Я пользуюсь вимом больше 10 лет и периодически даю шанс емаксу заменить ему Все попытки оказались неудачные просто потому что мне не хватило дня, чтобы настроить комфортную среду. Последний раз был spacemacs — хорошие отзывы, vim bindings, но мне тоже не хватило дня. И даже второго дня. Если построить график кол-ва произнесённых мною слов WTF, то в эти два дня был ярко выраженный пичок. Начиная с того, как при чистой установке, я получил гору всяких непонятных ошибок, заканчивая постоянным гуглением, изучением elisp и всей инфраструктуру emacs даже для небольших твиков, заканчивая неожиданным отваливанием всех vim binding в непонятных ситуациях. Я уверен, что emacs — хороший редактор. Я уверен, что это со всех точек зрения более качественное и продуманное ПО, чем VIM, который всегда писался на коленке (как и VI). Вот только в известной шутке про операционную систему, без разве что хорошего редактора, больше правды, чем шутки. Я не готов тратить недели на настройку и изучения емакса, даже если они окупяться. Для сравнения вим искаропки уже годится для полноценной работы. Для настройки под себя достаточно полчаса. За 10 лет работы в виме у меня в .vim примерно 3 (!) плагина, один из которых цветовая схема и vimrc размером полкилобайта (!), включающий все твики и подсебяшные кейбиндинги.
                                                              0

                                                              А в чем претензия? Ну нравится вим, так и пользуйтесь на здоровье! :)


                                                              Мне в в виме не хватало нескольких критичных фич, которые я нашёл в емаксе. Потому и перешёл на него. Да и вим не забываю и поглядываю, как там и что.

                                                                0

                                                                А про за фичи-то?)) А то у меня закладывается мысль, что они мне тоже нужны xD

                                                                  +3

                                                                  (Я по профилю не разработчик, а DevOps, и кодить приходится не очень часто и, скорее, скрипты. Поэтому языковые фичи для меня имеют второстепенное значение. Гораздо важнее удобство работы с кучей разнообразных проектов (Terraform, Ansible, CI/CD, Dockerfiles и т.п.), между которыми нужно постоянно переключаться.)


                                                                  1. Удобная работа с проектами типа Projectile для Emacs. Я думаю, в виме такое можно реализовать, но готового решения я не нашёл, а делать или компоновать своё на вимскрипте не хотел.


                                                                  2. Удобная работа с Git. В виме я пользовался fugitive, но с ним иногда вообще было непонятно, что происходит, а в недра лезть не хотелось. В Emacs попробовал Magit — он просто работает, в нём есть всё, что нужно, он понятный и очень, очень удобный.


                                                                  3. Файл менеждер. netrw был большой и, кажется, глючный. Перешёл на dirvish — минималистично, но даже слишком. Емаксовский dired подошёл как раз впору.


                                                                  4. Удобная документация. В емаксе реально удобно пользоваться документацией. В виме тоже более-менее, но не настолько.


                                                                  5. Графичесий режим. В емаксе он реально графический, а в виме это, скорее, обёртка консольного.


                                                                  6. Кастомизация. В емаксе можно менять, по ощущению, вообще всё. Всюду можно встроить свой хук, обработчик и т.п. И на елиспе это делать проще и понятнее, чем на вимскрипте.


                                                                  7. РЕПЛ. Он в емаксе интегрированный. Не надо танцев вокруг tmux и т.п. — вот он, репл, не в терминале, а в соседнем окне редактора. Я им пока немного пользовался и только для Python-скриптов, но уже то, что видел, впечатляет.


                                                                    0
                                                                    1. Вот документация в емаксе мне не понравилась: жмём C-h, потом выбираем где будем искать по функциям, по переменным, или где-то там ещё… а мне бы просто узнать, что это, вообще, за буквы, я не знаю функция это, или что-то другое. В Виме же :help wadafuckisthis и вот она справочка.
                                                                    2. В Vim 8 есть уже :terminal. А про танцы вокруг tmux, как-то странно такое слышать от DevOps'а… :)
                                                                      +1
                                                                      Вот документация в емаксе мне не понравилась: жмём C-h, потом выбираем где будем искать по функциям, по переменным, или где-то там ещё… а мне бы просто узнать, что это, вообще, за буквы, я не знаю функция это, или что-то другое. В Виме же :help wadafuckisthis и вот она справочка.

                                                                      C-h a


                                                                      В Vim 8 есть уже :terminal. А про танцы вокруг tmux, как-то странно такое слышать от DevOps'а… :)

                                                                      Доктор, что-то не так? Я странный девопс? Мне нужно начать пользоваться tmux, чтобы стать нормальным?


                                                                      Давайте, может, не будем спорить? Вам нравится вим, так и пользуйтесь. Мне, по перечисленным выше причинам, нравится емакс, поэтому перешёл на него. Вимом продолжаю пользоваться, радуюсь, когда кто-то его для себя открывает. Может, кому-то мой опыт емакса пригодится. Какая разница, здесь важно, на мой взгляд, не спорить, а сотрудничать. :)

                                                                      +1

                                                                      Спасибо за развернутый ответ!
                                                                      Единственное, по 1-му пункту, свои "пять копеек". Связка i3wm+vim перекрывает все вопросы работы с файловой системой, проектами, множеством мониторов и прочие плюшки, и почти не надо пользоваться мышкой))

                                                                        +1

                                                                        Да, спасибо! Пробовал такой вариант, но после трёх дней настройки i3 (который уже даже частично преднастроен в моём Manjaro), понял, что это не для меня. Встретив эту статью, понял, что я не один такой лузер, не осиливший i3, и успокоился окончательно. :D


                                                                        В итоге моё рабочее место состоит из ноутбука (закрытого) и двух мониторов:


                                                                        • один с воркспейсами: почта, браузер, Slack и т.д.
                                                                        • второй без воркспейсов: Emacs fullscreen
                                                                        • терминал: Tilix в обычном или quake-режиме (там же и vim, при необходимости)
                                                                        • tiling/window management: гномовские шорткаты, как в упомянутой статье
                                                                        • на совещаниях/в дороге emacs "переезжает" на ноутбучный монитор

                                                                        Вот такой вариант :)

                                                                          +2

                                                                          Ну я не знаю, после освоения вима, вопросов с освоением i3 не встало (предлагаю попробовать еще раз с этой вот инструкцией ). Единственное, надо было подпилить напильником, в течение месяца после запуска.
                                                                          Но! Теперь конфиг мигрирует со мной по всем тачкам из гита, и везде одинаковое окружение получается, что не может не радовать.

                                                                            0

                                                                            Спасибо за ссылку! У меня проблемы были, скорее, не с самим i3, а с окружением: апплеты, менюшки, настройки. Три дня пилил, а потом поставил и настроил под себя за пару часов гном и решил, что и ну его. Ноутбук — он для работы, игрищ и забав мне и на серверах хватает :D

                                                                  0

                                                                  Насчёт настройки — согласен, требуется больше времени, зато и гибкости больше. Ну и поначалу куча непоняток с elisp и т.п. В прошлые попытки попробовать этот непонятный загадочный emacs я его закрывал минут через 5-10. А в этот раз любознательность пересилила лень, открыл мануал, повтыкал вдумчиво, заинтересовался, и пошло-поехало. Ну и еще хотелось попробовать какой-нибудь лисп и repl-driven development.

                                                                    +2

                                                                    В емаксе очень много хорошего: и elisp, и репы с плагинами, и org-mode, и ещё вагон всего с телегой! Изучать это всё — кайф и разминка для ума. Но пользоваться этим невозможно. Я два месяца честно пытался, в рамках эксперимента, вдохновившись вот этим вот видосом освоить emacs (честно говоря, это был уже, кажется, третий подход к снаряду). Нет. Это реально — evil. И evil-mode это жалкое подобие режимов vim (к сожалению, все без исключения vim-эмуляторы этим страдают).
                                                                    Кстати, рекомендую с того же канала посмотреть стендапы про Vim. Не сказать, что прям ну очень много познавательного, но имеется. Я на этих материалах осваивал аудирование иностранной речи.

                                                                0
                                                                Пакетные менеджеры уже не нужны. По-моему, с 8-й версии VIM их умеет искаропки, в 99% случаев достаточно сделать git clone нужного плагина.
                                                                  +2
                                                                  Он не умеет управлять плагинами — обновлять их, откатывать обновления, показывать список изменений, удалять ненужные и прочее
                                                                  0
                                                                  Либо я пропустил, либо тема навигации в большом проекте не раскрыта. Сколько ни пробовал разных плагинов для переключения между файлами, везде есть какие-то проблемы или тормоза. Теги тоже не очень хорошо работают. На прошлой работе пытался настроить YouCompleteMe, но он либо зависал, либо не находил нужное (огромный проект на C++).

                                                                  В студенческие годы у меня тоже был вим с кучей плагинов и настроенных конфигов, и он вполне справлялся со студенческими проектами. Но сейчас я обычно использую IntelliJ/PyCharm/CLion с Vim-плагином. Все кнопки как в Vim, только еще есть полноценный IDE и никаких плясок с бубнами. Выбрал шрифт, цвета по вкусу, сочетания клавиш и поехали.

                                                                  CLion, правда, на прошлой работе я в итоге выкинул. Он жутко тормозил даже на моей 54-ядерной рабочей станции со 128 ГБ памяти. В итоге я установил IntelliJ Community Edition и использовал его как текстовый редактор без функций IDE. Все равно удобдней, чем Vim с плагинами.
                                                                    +1
                                                                    Либо я пропустил, либо тема навигации в большом проекте не раскрыта. Сколько ни пробовал разных плагинов для переключения между файлами, везде есть какие-то проблемы или тормоза.

                                                                    А fzf не пробовали? У меня даже на большом проекте в тысяч десять файлов работал нормально.

                                                                      0
                                                                      Честно говоря не помню, но скорее всего не пробовал. Спасибо за наводку, посмотрю при случае.
                                                                        0
                                                                        А не подскажете, его можно настроить на игнонирование определенных каталогов в зависимости от открытого проекта? Что-то вроде .gitignore
                                                                          0

                                                                          Да:


                                                                          • поиск по названиям файлов в проекте: fd
                                                                          • поиск по содержимому файлов в проекте (глобальный grep): ripgrep
                                                                            0

                                                                            Можно настроить файл .ignore — подходить как для ag так и для ripgrep

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


                                                                          Плагин fzf, команды Files, Tags, Buffers
                                                                            0

                                                                            Ух, сколько тут: и fzf, и Ag скоро приедет.
                                                                            Могу в свою очередь представить такие интересные буквосочетания:


                                                                            gf
                                                                            gd
                                                                            gD

                                                                            YCM это clang зависимый (с точки зрения C/C++) плагин, к нему подход нужен тонкий, поскольку он "гарантированно" работает с libclang, который сам же и скачивает. Чтобы он работал с системным, или с тем, который используете вы, ему нужен для этого специальный пендель на этапе сборки плагина. Если же вы не используете в проекте clang, то вам придётся, пойдя на некоторые компромиссы, подрихтовать .ycm_extra_conf.py


                                                                            IntelliJ/PyCharm/CLion с Vim-плагином. Все кнопки как в Vim, только еще есть полноценный IDE и никаких плясок с бубнами.

                                                                            Нет, вот с "все кнопки как в Vim" это очень не так. Далеко не все, и не сказать чтобы "как в Vim". Скорее: "некоторые кнопки примерно как Vim".

                                                                              0
                                                                              YCM это clang зависимый (с точки зрения C/C++) плагин

                                                                              Да, я знаю. В моем проекте кто-то уже проделал основную работу по интеграции YCM и я пытался использовать этот готовый конфиг. Но что-то он не справлялся.

                                                                              Нет, вот с «все кнопки как в Vim» это очень не так. Далеко не все, и не сказать чтобы «как в Vim». Скорее: «некоторые кнопки примерно как Vim».


                                                                              Согласен, что не «прям все». Но я каких-то супер-продвинутых функций vim не использую, поэтому особой разницы не замечаю. Просто привык работать с командами перемещения/редактирования/поиска и модальному интерфейсу, которые работают без проблем. Если ваши запросы сильно выше, то наверное у вас будет другой опыт.
                                                                                0

                                                                                У меня вроде не сильно высокие запросы, но в QtCreator раздражает необходимость дважды нажимать Esc для выхода из режима вставки, а в IntelliJ — неправильная работа отмены (u). Вроде максимально базовые вещи, а уже работают не так, как в vim, причём однозначно в худшую сторону.

                                                                            +1
                                                                            Использовал VIM на протяжении лет десяти. А то и больше. Пока основными языками программирования были PHP и Perl, он устраивал вполне. Пробовал несколько раз PHPStorm, но тяжеловат он ИМХО. Жужжащий вентилятор на i7 и 8-ми гигах RAM явно не справлялись с прожорливостью навороченной IDE. Недавно перешел в JS стек — Node и React. Попробовал пользоваться VIM-м — не очень удобно. Пересел на VS Code и счастлив! Честно говоря, не ожидал, что IDE, сделанная M$ будет настолько качественной и удобной. VIM теперь открываю все реже и реже.
                                                                              +1

                                                                              На каком языке пишете в vim? В случае с типизированными языками банальный рефакторинг с переименованием класса уже проблема, не говоря уже о таком же рефакторинге в языке с динамической типизацией.

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


                                                                                Не факт.
                                                                                Скажем для языка Go механизмы, используемые vim и IDE Jetbrains, чтобы понять что там в исходном коде чем является — впоть до недавних пор были вообще полностью идентичны, использовались в конечном итоге та же самая программа gocode, тот же самый пакет go/ast и т.п…
                                                                                  0

                                                                                  Мои основные языки — C++ и Python. Мне пока для рефакторинга относительно больших код-баз хватало обычных средств редактирования и регулярных выражений.

                                                                                  0
                                                                                  >> Думаю, ему можно это простить, так как других альтернатив нет.
                                                                                  К недостаткам интеграции с Jupyter в частности, и с работой с ячейками кода в общем — можно отнести отсутствие визуального выделения ячеек. Подскажите знающие, сложно ли запилить следующую логику:
                                                                                  If (строка начинается на #%%):
                                                                                  вывести под этой строкой дополнительную горизонтальную линию
                                                                                  if (курсор находится в ячейке):
                                                                                  изменить цвет фона на более светлый

                                                                                  >> Он очень быстрый. Ввиду особенностей его рендера
                                                                                  >> если на него слишком много плагинов, то он поползёт со скоростью улитки.

                                                                                  Ну вот так вот всегда. Сперва критика сред разработки по поводу глюка прокрутки, а потом…

                                                                                  PS: Пользуюсь и тем и другим. Но интерактивная работа с код+интерпретатор+ячейки пока под вимом не очень.
                                                                                    +1

                                                                                    Добавить горизонтальную черту — не проблема. Есть плагины, которые умеют вставлять в текст символы, которые не будут сохранены на записи. Разные цвета фона делаются только через костыли.


                                                                                    Вим быстрый, но некоторые плагины, например старые проверяльщики синтаксиса, могут результировать в подвисаниях. Просто найдите им асинхронную альтернативу.

                                                                                    –2
                                                                                    1. статья реально слабая, а тема очень интересная. Жаль, что она не раскрыта полностью. Например, я очень люблю vim, т.к. зачастую это единственный вменяемый вариант (nano? серьезно? ни за что!) что-то на удаленном сервере понастраивать без каких-либо извращений. Ну, или вот отличия vi, vim и neovim — я не понял из статьи в чем они


                                                                                    2. действительно vim можно сделать красивым и удобным, но я видел какой-то оверинжиниринг, когда коллеги на маках выступают с докладами, код показывают в vim и… Vim тормозит! Реально тормозит. Тема почему это так и как можно все идеально настроить тоже раскрыта очень поверхностно.


                                                                                    3. не раскрыта тема интеграции с теми же lang-серверами (а-ля как в rust).


                                                                                      –1
                                                                                      Имхо, статья просто показывает, что можно делать в vim в современных условиях. Какие есть возможности и т.д.

                                                                                      А ваши вопросы они ближе к основам. А основы, они как были так и остались: «Your problem with Vim is that you don't grok vi». Этот ответ набрал на So более 2.8к+.

                                                                                      Можно за деревьями не увидеть леса. Можно за всеми этими плагинами, красивостями не использовать всю мощь слепой печати и команд vim-a. И что тогда они будут стоить все эти плагины и украшения? Да, ровным счетом ничего, уж лучше тыкать мышкой в IDE.

                                                                                      Изучение слепой печати и команд в vi — это инвестиция в себя. Один раз научился и все.
                                                                                      Плагины будут приходить и уходить, IDE будут умирать и приходить новые, но навык слепой печати и команд на уровне рефлексов в vim останется на всю жизнь.

                                                                                        –1

                                                                                        Извините, Вы вообще читаете, что я пишу?
                                                                                        Подчеркну — я тоже считаю, что vim отличный тулинг и при прочих равных я им и пользуюсь. Другой вопрос, что статья совершенно не раскрывает всей магии. О чем и речь.
                                                                                        Автор взялся (взялась?) за популяризацию инструмента… но "не шмогла"

                                                                                          +1
                                                                                          Читал, просто мне показалось, что если человек не знает ответов на вопрос: «отличия vi, vim и neovim», то надо написать то что я написал.
                                                                                          Сорри, если что не так.

                                                                                          На счет neovim, рекомендую это видео:
                                                                                          www.youtube.com/watch?v=NmHuu3UjQ7k
                                                                                          Толково, на мой взгляд рассказано. Будет ясная картина.

                                                                                          А по поводу, отличия vi и vim — это в книжке, хорошо расписано:
                                                                                          www.ozon.ru/context/detail/id/19698693

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

                                                                                            0
                                                                                            что если человек не знает ответов на вопрос: «отличия vi, vim и neovim», то надо написать то что я написал.

                                                                                            Есть небольшая разница между "не знает" и "не нашел в статье ответа" (ок, хорошо, я сам виноват — криво сформулировал мысль).

                                                                                            +1
                                                                                            Зачем писать про то, про что уже есть на Хабре море статей? Про автодополнения и интеграцию с Lang-серверами уже было написано достаточно, чтобы можно было разобраться. Может быть я про это упомяну в следующий раз.

                                                                                            Решением проблем с производительностью является использование легковесных плагинов с поддержкой асинхронности.

                                                                                            Различия между Vim и NeoVim более значительны для их разработчиков, чем для пользователей.
                                                                                              +1
                                                                                              Различия между Vim и NeoVim более значительны для их разработчиков, чем для пользователей.

                                                                                              Согласен, могу чуть дополнить про Neovim:


                                                                                              • более современные дефолты, благодаря им, удалось вполовину сократить конфиг
                                                                                              • хорошо интегрируется, благодаря чему для него есть интересные GUI-фронтенды
                                                                                              • перспективный roadmap
                                                                                              • открытая community-driven модель разработки (в Vim — единоличная с BDFL)
                                                                                        0
                                                                                        Сам недавно перешел на vim (месяц назад). Сначала попробовал использовать плагин для vscode, но после установки плагина стал жутко лагать (ноут достаточно старый) и решил прейти в терминал. Установил сборку spacevim. Проект интересный, но через несколько дней я понял, что не то (перегруженный, мало документации по ошибкам и конфигурации) и погнал писать свой vimrc (как мне тогда не хватало этой статьи).

                                                                                        Сейчас меня почти все устраивает, кроме дебага. Но я нашел приемлемый для меня вариант ":!code .". vscode подхватывает все изменения файла извне так что я дебажу в нем, а редактирую в vim
                                                                                          –1
                                                                                          VSCode — быстрый, почти как редактор, при этом мощный как IDE (и мультикурсор прямо как в саблайме)
                                                                                          До сих пор не понимаю зачем новичкам Vim.
                                                                                          Даже на вашу статью посмотреть:
                                                                                          — Установили вим? Олтично, теперь скачайте 100500 плагинов, настройте их, и можно начинать работать!
                                                                                          Вопрос — нафига так мучаться?
                                                                                            +2
                                                                                            — Установили вим? Олтично, теперь скачайте 100500 плагинов, настройте их, и можно начинать работать!


                                                                                            Ну вас же лично никто не заставляет это делать?
                                                                                            Просто поверьте, подстроенный под себя инструмент это здорово.

                                                                                            Вопрос — нафига так мучаться?

                                                                                            Там потом мультиоргазмы начинаются, когда осваиваешься.
                                                                                            Серьезно.

                                                                                            VSCode — быстрый, почти как редактор, при этом мощный как IDE (и мультикурсор прямо как в саблайме)


                                                                                            VSCode в данном контексте даже смешно.

                                                                                            Ресурсов жрет немало, но при этом как редактор — такой же банальный как и Atom, Sublime и пр. Ну хорошо, хорошо — по дефолту немного настроенный лучше под программиста. Но — это все его достоинства.

                                                                                            Если уж брать конкурента vim — то брать нормальную IDE. Там можно рассуждать, что будет совсем другой уровень.

                                                                                            А VSCode — стоит в одном ряду с банальными текстовыми редакторами и это ничуть не лучший и не худший выбор — он просто очередной редактор и только.

                                                                                            (и мультикурсор прямо как в саблайме)


                                                                                            Не аргумент даже рядом.
                                                                                            Мультикурсоры в vim из коробки уже лет 20 как есть.
                                                                                            Реализовано конечно по своему по вимовски, не так как вы привыкли в VSCode. Но есть уже очень и очень много лет как.
                                                                                              –1
                                                                                              Просто поверьте, подстроенный под себя инструмент это здорово.

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

                                                                                              VSCode в данном контексте даже смешно. Ресурсов жрет немало, но при этом как редактор — такой же банальный как и Atom, Sublime и пр

                                                                                              А VSCode — стоит в одном ряду с банальными текстовыми редакторами и это ничуть не лучший и не худший выбор — он просто очередной редактор и только.

                                                                                              Извините, но вы совершенно неправы. Посмотрите хотя бы страницу VSCode — https://code.visualstudio.com
                                                                                              И после этого назовите хоть одну вещь, которая есть в «IDE» и нету там (без всяких плагинов).

                                                                                              Мультикурсоры в vim из коробки уже лет 20 как есть.

                                                                                              Нифига их там нет. Мультикурсор, если не изменяет память, появился еще в Textmate, тожe нцать лет назад. Ничего общего с вимовскими командами и макросами он не имеет, а является альтернативой им.
                                                                                              +1

                                                                                              VSCode — такой же редактор, как и Vim, и под него тоже нужно ставить плагины для комфортной работы. У Vim также немерено встроенного функционала, как тут многие в комментариях уже отмечали. Если вам хватает дефолтного состояния Студии, то вы либо разрабатываете под веб, либо у вас ещё не было необходимости в решении комплексных задач.


                                                                                              А насчёт скорости работы — ну может быть в сравнении с IDE и Atom он быстрый...

                                                                                                –1
                                                                                                VSCode — такой же редактор, как и Vim

                                                                                                Полная противоположность реальности.
                                                                                                У VSCode «из коробки» дебаггер, intellisense, рефакторинг, git, поддержка кучи языков и т.п.
                                                                                                По сути ваше мнение о ВСКоде такое же как мое о Виме — нe пользуюсь, но осуждаю :)
                                                                                                Давайте хоть в этом признаемся.
                                                                                                  +2

                                                                                                  Я иногда пользуюсь VSCode. Мне он нравится значительно меньше Vim, так как он более мудрёный в самом плохом смысле. Сделать в Vim кастомную функцию и забиндить её вызов на какое-то событие — пару строк в конфиге. В VSCode вам придётся создавать для этого отдельный проект на JavaScript.


                                                                                                  То, что в текстовый редактор заранее добавили несколько плагинов не делает его IDE. Тем более, что это результирует в этой ужасной полосе иконок слева. Это не только впустую тратит место, так ещё на неё понавешано большое количество функциональности, и даже если вы её скроете, то вам все равно её придётся часто вызывать по сочетанию клавиш.


                                                                                                  Мне нравится, что вы упомянули intellisense, так как vim-coc является его прямым портом под Вим. Git полностью обслуживается vim-fugitive и vim-gitgutter. Vim имеет встроенную поддержку подсветки моря языков и, если вдруг ваш не поддерживается или вам она не нравится, то это чинится плагинами. Под рефакторинг есть общие плагины и специализированные программы типа eclim.


                                                                                                  Отсутствие некоторых вещей в базовой комплектации делает Vim только лучше, так как он становится более универсальным. Многие его используют как блокнот. Конечно, если есть желание, то для этого можно подрубить и Xcode, и Visual Studio, но я думаю, что не стоит объяснять почему это глупо.


                                                                                                  Единственное из перечисленного, что делает Vim хуже — поддержка дебаггеров. Но про это тоже в комментариях всё пояснили.


                                                                                                  Есть причина, по которой я пользуюсь Vim и она состоит в том, что мною не было найдено альтернативы лучше. Но вы, конечно, можете всегда это оспорить и написать про это статью в хаб, посвящённый VSCode. Стоп...

                                                                                                    0
                                                                                                    Сделать в Vim кастомную функцию и забиндить её вызов на какое-то событие — пару строк в конфиге

                                                                                                    Вот честно — ни разу не надо было. Вы это все на vimscript'e пишите?

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

                                                                                                    А что по-вашему делает иде — «IDE»? И что для вас вообще означает это понятие? Для меня это не «полоска слева», я ее совсем не замечаю, для меня IDE — это intellisense, документация по библиотекам при наведении курсора, подсказки ошибок, индексация кода и т.д. Все это есть в VSCode «из коробки». Про 100500 плагинов и был мой изначальный комментарий.

                                                                                                      0
                                                                                                      Для меня это не «полоска слева», я ее совсем не замечаю, для меня IDE — это intellisense, документация по библиотекам при наведении курсора, подсказки ошибок, индексация кода и т.д. Все это есть в VSCode «из коробки».


                                                                                                      Для любого языка?
                                                                                                      vim потому и надо настраивать, что есть разные языки.
                                                                                                      Впрочем, можете просто взять готовую сборку vim для вашего языка.
                                                                                                        0
                                                                                                        Для любого языка?

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

                                                                                                        Тут весь и прикол в том что не надо искать никакие готовые сборки и тому подобное.
                                                                                                        +1
                                                                                                        Вот честно — ни разу не надо было. Вы это все на vimscript'e пишите?

                                                                                                        Он справляется со своей задачей. При желании можно использовать другие языки в NeoVim.


                                                                                                        А что по-вашему делает иде — «IDE»? И что для вас вообще означает это понятие? Для меня это не «полоска слева», я ее совсем не замечаю, для меня IDE — это intellisense, документация по библиотекам при наведении курсора, подсказки ошибок, индексация кода и т.д.

                                                                                                        Если вы мне сможете объяснить зачем MicroSoft держит два одинаковых продукта под одним брендом, то я вам поверю, что VSCode — IDE.


                                                                                                        Еще как блокнот многие используют notepad.exe, он от этого тоже становится немножко редактором кода?

                                                                                                        И тут любители nano резко оскорбились

                                                                                                          0
                                                                                                          сли вы мне сможете объяснить зачем MicroSoft держит два одинаковых продукта под одним брендом, то я вам поверю, что VSCode — IDE.

                                                                                                          При чем тут это? Откуда я знаю зачем им опенсофтверная иде, может хотят захватить рынок разработчиков, которым Visual Studio нафиг не сдалась? Еще и гитхаб купили. Хмм…
                                                                                                            0

                                                                                                            Скачайте обычную Студию и потыкайте в неё. Со временем понимание придёт.

                                                                                                              0
                                                                                                              Нафига мне это?
                                                                                                                0

                                                                                                                Простите за грубый ответ, но чтобы не писать чушь в интернете.

                                                                                                                  –1
                                                                                                                  Аргументы закончились.
                                                                                                                    +2

                                                                                                                    Как я могу разговаривать с человеком, у которого нет опыта работы с темой спора и который не хочет этот опыт обрести?


                                                                                                                    Пользуйтесь VSCode на здоровье, никто его у вас не отнимет.

                                                                                                                      0
                                                                                                                      Извините, но вы реально сейчас уходите от разговора.
                                                                                                                      Вы вот в привели такой аргумент: «Если вы мне сможете объяснить зачем MicroSoft держит два одинаковых продукта под одним брендом, то я вам поверю, что VSCode — IDE.»

                                                                                                                      А я не Microsoft, я не знаю зачем они что-то делают. Но я могу предположить что т.к. оба продукта их — то им пофиг, там нет дифференциации. Тем более обычная Visual Studio — ориентирована на совсем другой рынок.

                                                                                                                      Если разговор начался про конкретные плюсы в разных редакторах, а вы переходите на какие-то мутные разговоры про microsoft — то мне кажется что это мне с вами не о чем говорить, а не вам со мной.
                                                                                                                        +1
                                                                                                                        Тем более обычная Visual Studio — ориентирована на совсем другой рынок.

                                                                                                                        Не уж то вы сами ответили на мой вопрос? Два продукта для двух разных рынков. Первый покрывает аудиторию любителей полнофункциональных IDE, а второй — легковесных текстовых редакторов.


                                                                                                                        Классические попытки Майкрософт в монополию.

                                                                                                  0
                                                                                                  Вопрос — нафига так мучаться?

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

                                                                                                    –1
                                                                                                    Если вы не девопс/сисадмин — нафига?
                                                                                                      0
                                                                                                      Если вы не девопс/сисадмин — нафига?

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

                                                                                                      В классических редакторах нужно руки выкручивать для shortkeys или мышью пользоваться.

                                                                                                      Собственно, модальность vim это и есть его киллер-фича.
                                                                                                      Все остальное есть и в других инструментах.

                                                                                                      Плюс экономия заряда батареи в дороге важна — а vim требует меньше ресурсов процессора, чем полноценная IDE или VSCode. Потому и взял vim как основной редактор для ноутбука в дороге.
                                                                                                        0
                                                                                                        Я, к примеру, выучил vim для возможности работы в неудобных местах без стола на ноутбуке в дороге.

                                                                                                        Не вижу никакого аргумента не пользоваться ide нa том же ноутбуке. У меня вообщe есть только ноутбук.

                                                                                                        В классических редакторах нужно руки выкручивать для shortkeys или мышью пользоваться.

                                                                                                        Ну блин, это жe совсем не так.
                                                                                                        Мой обычный «воркфлоу» мультикурсором выглядит как-то так (для примера разделение словаря на отдельные переменные):
                                                                                                        image
                                                                                                        (Я тут еще немного «camera shy», в обычной работе все происходит быстрее)

                                                                                                        При наборе и навигации по тексту мышкой я нe пользуюсь. Но, например когда просто просматриваешь код — часто удобнее нажать «jump to definition» на тачпаде, а не на клавиатуре.
                                                                                                          0

                                                                                                          У вас пример в Gif довольно неудачный, так как это самые базовые вещи, на которые способен Vim

                                                                                                            0
                                                                                                            Ну это тоже только базовые вещи нa которые способен мультикурсор.
                                                                                                            Приведите свой пример.
                                                                                                              +1

                                                                                                              Тут вы пытаетесь доказать, что мультикурсор в Vim что-то не умеет ==> действует презумпция невиновности ==> это от вас нужно ждать пример комплекснее.


                                                                                                              Ваши действия можно повторить сочетанием клавиш: dd3jdd0<C-q>3k3lcconst<Esc>$<C-q>3jd

                                                                                                                0
                                                                                                                это от вас нужно ждать пример комплекснее

                                                                                                                А вы свой комментарий выше перечитайте:
                                                                                                                > пример в Gif довольно неудачный, так как это самые базовые вещи, на которые способен Viм

                                                                                                                «Презумция невиновности» действует на меня в этом случае ;)

                                                                                                                Ваши действия можно повторить сочетанием клавиш: dd3jdd0<C-q>3k3lcconst$<C-q>3jd

                                                                                                                Куда проще.
                                                                                                                  0

                                                                                                                  Давайте попробуем разобраться в вашей логике.


                                                                                                                  1). Вы прислали простой пример.


                                                                                                                  2). Вам указали, что пример простой и попросили пример, способный "разбить Vim вдребезги".


                                                                                                                  3). Вы сказали, что это вам должны привести пример, который "разобьёт VSCode вдребезги".


                                                                                                                  Если мы говорим про курсор в целом, а не только в плане "мультикурсоности", то с этим плагином вы можете одной командой перейти в любую точку на экране с клавиатуры. Я уже не говорю о встроенных методах перемещения. Добавим к этому широкий арсенал редактирования и мы получим, что Vim по определению способен на "большие свершения".

                                                                                                                    –1
                                                                                                                    3). Вы сказали, что это вам должны привести пример, который «разобьёт VSCode вдребезги».

                                                                                                                    Нене, вы неправильно мою логику трактуете. Я сказал — привидите мне пример, который на ваш взгляд «разобьет VSCode вдребезги», чтобы я знал с чем мне работать :)

                                                                                                                    с этим плагином вы можете ...

                                                                                                                    Ну епрст, опять про плагины. Для VSCode есть vim плагин. Шах и мат.
                                                                                                                      +1
                                                                                                                      Нене, вы неправильно мою логику трактуете. Я сказал — привидите мне пример, который на ваш взгляд «разобьет VSCode вдребезги», чтобы я знал с чем мне работать :)

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


                                                                                                                      Ну епрст, опять про плагины.

                                                                                                                      Вчитайтесь в название. Это просто обёртка вокруг стандартных команд.


                                                                                                                      Для VSCode есть vim плагин. Шах и мат.

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

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

                                                                                                                        Да у меня про вас точно такое же подозрение. Вы сказали «это базовый уровень» Так приведите пример не базового. Или вам весь мой рабочий процесс в гиф записать?
                                                                                                                          0

                                                                                                                          Покажите как вы можете прыгнуть в любую точку экрана с клавиатуры в VSCode.

                                                                                                                            –1
                                                                                                                            Типа того? Cmd+p :%line_number%
                                                                                                                            image
                                                                                                                            так же можно перейти в любой файл / модуль / функцию и т.д.
                                                                                                                              0

                                                                                                                              В easymotion вы можете дать поиск по словам или по букве, после чего сразу перейти к результату, введя шорткат, показанный на экране. Перейти к строчке по её номеру несложно (самый простой вариант — gg300j).

                                                                                                                                0
                                                                                                                                Этот плагин есть и для VSCode и там все то же самое: https://marketplace.visualstudio.com/items?itemName=JaredParMSFT.EasyMotion
                                                                                                                                  0

                                                                                                                                  Но он его не предлагает автоматически скачать при открытии файла...


                                                                                                                                  Vim умеет бегать влево-вправо по словам, по окончаниям слов, а также умеет повторять поиск символов в строке. У вас так можно?

                                                                                                                                    0
                                                                                                                                    А то:
                                                                                                                                    Заголовок спойлера
                                                                                                                                    image
                                                                                                                                      0

                                                                                                                                      Поиск и изменение слов в Vim осуществляется либо регулярными изображениями, либо плагином vim-multiple-cursors.


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

                                                                                                                                        0
                                                                                                                                        Вот вообще все это, кроме скроллинга кастомного размера, тоже есть в VSCode, и без всяких плагинов.

                                                                                                                                        Поиск по регуляркам понятно дело есть, причем быстрый.
                                                                                                                                        Навигация:
                                                                                                                                        По строке — cmd + arrow
                                                                                                                                        По экрану — pgUp / pgDown
                                                                                                                                        Конец/начало файла — cmd + end/home
                                                                                                                                          0

                                                                                                                                          Скроллинг и в Vim без плагинов.


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

                                                                                                                                            0
                                                                                                                                            В вскоде ctr+tab по умолчанию переходит в порядке открытия.

                                                                                                                                            Вот вам еще пример — перемещение блоков кода клавиатурой с автоматической индентацией и складывание кода в одну строку и обратно:
                                                                                                                                            Заголовок спойлера
                                                                                                                                            image
                                                                                                                                              0

                                                                                                                                              Красивого сдвига там нет. Блок кода можно по-старинке либо выделить построчно с помощью V, потом его удалить, прыгнуть на нужную строчку и вставить. Также можно его сразу двинуть в нужное место командой :m <номер строки>.


                                                                                                                                              В принципе, для этого можно самому написать мини-плагин. Тут есть пример как сдвигать одну строчку. Для range это будет немногим сложнее.


                                                                                                                                              Форматирование лечится с помощью плагина Autoformat, но можно повторить выделение gv и его сдвинуть ручками с помощью >> (а потом . если надо несколько раз). Текст вытягивается в одну строку с помощью J.


                                                                                                                                              В Vim есть встроенное автодополнение. Он умеет подбирать слова, имена файлов, теги и данные из Lang-серверов, если они могут в omnifunc.


                                                                                                                                              Намного интереснее — контекстное автодополнение и автодополнение по строкам.

                                                                                                                                                0
                                                                                                                                                Намного интереснее — контекстное автодополнение и автодополнение по строкам.

                                                                                                                                                Не очень понял что вы имеете в виду, но в вскоде есть такие штуки:

                                                                                                                                                Заголовок спойлера



                                                                                                                                                  0

                                                                                                                                                  Вы бьёте по контекстному автодополнению, пока оно не найдёт нужное вам слово, после чего начинается магия. По последующим нажатиям он начинает подставлять слова с той строчки (контекста), с которого вы взяли первое слово. Но вы также можете изменять значения по мере ввода. Таким образом вы можете быстро набрать несколько похожих строк или кусков строк с небольшими изменениями.


                                                                                                                                                  Автодополнение по строкам просто скроллит строчки, которые вы бы хотели вставить.

                                                                                                                                                    0
                                                                                                                                                    Извините, но я вообще ничего не понял.
                                                                                                                                                    Предлагаю на этом закончить.
                                                                                                                                                      0

                                                                                                                                                      В этом видео подробно рассказано про эти трюки.


                                                                                                                                                      Предлагаю на этом закончить.

                                                                                                                                                      Отличная идея, так как мы никогда к логическому завершению не придём.

                                                                                                                                                  +1
                                                                                                                                                  Форматирование лечится с помощью плагина Autoformat

                                                                                                                                                  gg=G для всего файла
                                                                                                                                                  =G для текущего блока

                                                                                                                                    +1
                                                                                                                                    Перейти к строчке по её номеру несложно (самый простой вариант — gg300j).

                                                                                                                                    Самый простой — 300gg

                                                                                                                                      +1
                                                                                                                                      Перейти к строчке по её номеру несложно (самый простой вариант — gg300j).
                                                                                                                                      Самый простой — 300gg

                                                                                                                                      Можно короче 300G
                                                                                                                                      Правда количество нажатий клавиш — то же, что и в предыдущем примере.
                                                                                                                                        +1

                                                                                                                                        Я лично ввожу :300. Вим у каждого свой, ага :). Правда, число нажатий всё равно не меняется.

                                                                                                                                          0
                                                                                                                                          Я лично ввожу :300. Вим у каждого свой, ага :). Правда, число нажатий всё равно не меняется.

                                                                                                                                          Shift,:, 3, 0, 0, Enter — итого на одно нажатие больше, плюс надо зажимать шифт ))

                                                                                                                                            0

                                                                                                                                            А ведь и правда, у вас Enter не нужен. Всё, меняю привычки. Ну, с месяцок займёт :)))

                                                                                                                                          0
                                                                                                                                          Правда количество нажатий клавиш — то же, что и в предыдущем примере.

                                                                                                                                          Ну мы же не про самый короткий, а самый простой )). С моей точки зрения, чем меньше шифтов зажимаешь, тем лучше.

                                                                                                                        0
                                                                                                                        Ваши действия можно повторить сочетанием клавиш: dd3jdd0<C-q>3k3lcconst$<C-q>3jd


                                                                                                                        Это надо зачитывать до того, как черной курице голову отрубишь или после?
                                                                                                                        Парсер-лох.
                                                                                                                          0
                                                                                                                          Это надо зачитывать до того, как черной курице голову отрубишь или после?

                                                                                                                          Вы свой код зачитываете да или после? Для вас программирование, в целом, это ритуал чёрной магии?

                                                                                                                            0
                                                                                                                            А вы всегда такой серьезный? И, да, строка выше — это не программирование.
                                                                                                                              0
                                                                                                                              А вы всегда такой серьезный?

                                                                                                                              По утрам.


                                                                                                                              И, да, строка выше — это не программирование.

                                                                                                                              Программирование. Процесс редактирования текста в виме это процентов на 80% программирование.

                                                                                                                    0
                                                                                                                    Я, к примеру, выучил vim для возможности работы в неудобных местах без стола на ноутбуке в дороге.


                                                                                                                    Не вижу никакого аргумента не пользоваться ide нa том же ноутбуке. У меня вообщe есть только ноутбук.


                                                                                                                    Если на ноуте работаете именно в дороге, то тогда вам должно быть понятны ситуации:

                                                                                                                    • Только разработался, а заряд уже закончился.
                                                                                                                    • Когда работаешь где попало, запястья постоянно задевают за тачпад.
                                                                                                                    • Нажимем клавишу-модификатор, а ноут, стоящий не на твердой поверхности, перекашивается.
                                                                                                                    • Негде ездить мыши, а тачпадом не получается так быстро и точно как мышью
                                                                                                                      –2
                                                                                                                      Только разработался, а заряд уже закончился.

                                                                                                                      Это знакомо, но к редактору мало имеет отношения на мой взгляд (vscode это не хром все-таки, и тем более не inteliJ)
                                                                                                                      Когда работаешь где попало, запястья постоянно задевают за тачпад.

                                                                                                                      Извините, но у вас хреновый тачпад, который не замечает ложные нажатия.
                                                                                                                      Нажимем клавишу-модификатор, а ноут, стоящий не на твердой поверхности, перекашивается.

                                                                                                                      Вообще «надуманый» аргумент, у меня например клавиши Q,W,A,S,Z,X все располагаются левее главной клавиши модификатора (Command)
                                                                                                                      Да и даже держа ноут на коленках нe могу представить с какой силой надо жать на клавиши чтобы он перекосился.
                                                                                                                        0
                                                                                                                        Только разработался, а заряд уже закончился.

                                                                                                                        Это знакомо, но к редактору мало имеет отношения на мой взгляд (vscode это не хром все-таки, и тем более не inteliJ)


                                                                                                                        Но все же по жручести — VSCode далеко и не vim

                                                                                                                        Извините, но у вас хреновый тачпад, который не замечает ложные нажатия.

                                                                                                                        На MacBook Pro?
                                                                                                                        Считается лучшим тачпадом в мире.

                                                                                                                        Возможно, у меня руки такой формы.
                                                                                                                        ;)

                                                                                                                        Вообще «надуманый» аргумент, у меня например клавиши Q,W,A,S,Z,X все располагаются левее главной клавиши модификатора (Command)
                                                                                                                        Да и даже держа ноут на коленках нe могу представить с какой силой надо жать на клавиши чтобы он перекосился.

                                                                                                                        Как бы то ни было — тем не менее это так. У меня. Дико мешает и раздражает колбание ноута.

                                                                                                                        Ноут больше качается, когда хочешь заменить неудобный тачпад клавиатурными сочетания в классических редакторах.
                                                                                                                        В vim с его модальностью — сочетания выполняются последовательно и не нужно ни руки выкручивать, и ноут шатается меньше.
                                                                                                                          –1
                                                                                                                          На MacBook Pro?
                                                                                                                          Считается лучшим тачпадом в мире.

                                                                                                                          Возможно, у меня руки такой формы.

                                                                                                                          Не поверите — у меня такой же ноутбук, и вроде все ОК :)

                                                                                                                          Ноут больше качается, когда хочешь заменить неудобный тачпад клавиатурными сочетания в классических редакторах.
                                                                                                                          В vim с его модальностью — сочетания выполняются последовательно и не нужно ни руки выкручивать, и ноут шатается меньше.

                                                                                                                          Ну согласитесь, совсем «edge case» аргумент.
                                                                                                                            0
                                                                                                                            Ну согласитесь, совсем «edge case» аргумент.

                                                                                                                            Какая разница edge case это или нет? У человека есть проблема, он нашёл какое-то решение. У меня с тачпадами на ноутбуках кстати точно такая же проблема.

                                                                                                                              0
                                                                                                                              Какая разница edge case это или нет?

                                                                                                                              Большая. Говорить что в виме тачпад не задеваешь руками, а в остальных редакторах задеваешь — это еще проверить надо.
                                                                                                                                0
                                                                                                                                Говорить что в виме тачпад не задеваешь руками, а в остальных редакторах задеваешь — это еще проверить надо.

                                                                                                                                Ну я думаю skrimafonolog проверил )). Я, кстати, задеваю тачпад независимо от редактора, просто когда пользуешься чем-то вроде вима — тачпад можно отключить.

                                                                                                                                  0
                                                                                                                                  Большая. Говорить что в виме тачпад не задеваешь руками, а в остальных редакторах задеваешь — это еще проверить надо.


                                                                                                                                  Я не это говорил.
                                                                                                                                  Он просто отключен, когда я в vim.
                                                                                                                            0
                                                                                                                            vscode это не хром все-таки
                                                                                                                            Как сказать. Electron, на котором работает Vs Code, это, по сути, Chromium.
                                                                                                                      0
                                                                                                                      Если вы не девопс/сисадмин — нафига?

                                                                                                                      Чтобы работать было удобно.

                                                                                                                        –1
                                                                                                                        Ну так я и говорю о том что сейчас есть гораздо более удобные и современные инструменты чем вим. Без адского «learning curve».
                                                                                                                        Разумеется я не пытаюсь никого из вимеров отговорить им пользоваться, но мне не понятно зачем новым людям учить этот инструмент. Тут в комментариях уже несколько раз говорили что вим умеет что-то, что недоступно в других редакторах, но пример никто так и не привел. Я уже несколько примеров привел где мультикурсором можно делать все тоже самое что командами вима.
                                                                                                                          +2

                                                                                                                          Ага, а еще скажите, что любой редактор можно настроить так, что у него комбинации клавиш будут как в виме, чтобы у вимоводов подгорело (долой конвенциальные сочетания типа ctrl+v — это для нубов, ога)


                                                                                                                          Меня лично vim спасает неоднократно именно в админских историях.

                                                                                                                            +1
                                                                                                                            Меня лично vim спасает неоднократно именно в админских историях.

                                                                                                                            Да я уже выше писал что с админами и девопсами все понятно — там это один из основных инструментов по сути.
                                                                                                                              0
                                                                                                                              Да я уже выше писал что с админами и девопсами все понятно — там это один из основных инструментов по сути.


                                                                                                                              Да ладно.
                                                                                                                              А почему все таки не nano, который безрежимный?
                                                                                                                                0
                                                                                                                                Нано по-вашему «современный редактор»?
                                                                                                                                  0
                                                                                                                                  Нано по-вашему «современный редактор»?


                                                                                                                                  Когда я админю — то vim там на серверах с дефолтными настройками, по умолчанию все и без плагинов.

                                                                                                                                  Не вижу причин почему с nano это не прокатит.
                                                                                                                                    0
                                                                                                                                    Не вижу причин почему с nano это не прокатит.

                                                                                                                                    Вы это серьезно? nano по возможностям навигации и манипуляций текстом к виму и близко не подошел (а к современным редакторам тем более)
                                                                                                                                      0
                                                                                                                                      Вы это серьезно? nano по возможностям навигации и манипуляций текстом к виму и близко не подошел (а к современным редакторам тем более)


                                                                                                                                      Серьезно.
                                                                                                                                      Крупные манипуляции с серверными конфигами так, чтобы вам понадобился весомый функционал, делать удаленно нельзя.