LINUX.ORG.RU
ФорумTalks

Как осилить Vim?

 , , , ,


2

5

Уже 5 лет на генте, пишу на сях, работаю в эмбеде.
По статусу пора уходить от гуёв в голую консоль и если на тайловые wm таки пересел, то с IDE все сложнее.

Я НЕ МОГУ ОСИЛИТЬ VIM

Что можно сделать в тяжелой ситуации жесткой зависимости от удобства и искаробочности, чтобы искоренить в себе мальчика и стать настоящим бородатым кулхацкером?
Делитесь историями успеха, как вы начинали пользоваться vim после полноценных IDE и пилили его?

★★★★★

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

Совет хороший.

Только в вашей фантазии.

В генте можно сделать eix app-vim/ и посмотреть, что же интересного существует.
Это.. удобней чем vim'овская коллекция плагинов в вебе.

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

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

Клиент серверный индексатор на основе clang.

Ycm тоже клиент-серверный. Только сервер запускается для каждого экземпляра вима.

Рекомендую тупо взять и попробовать на любом жирном проекте.

Спасибо, попробую.

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

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

takino ★★★★★
()

Использую vim в качестве редактора по умолчанию во всех системах — Linux, Mac OS и Windows (просто в один момент взял и удалил все остальные редакторы, чтобы не было соблазна запустить их «прямо здесь и сейчас»). Текст набрать, конфиги поправить, простенький скрипт набросать, быстренько глянуть интересующее место в исходниках.

За всё время ни разу не пытался найти в нём замену полноценной IDE. Для проектов на C++ юзаю MS Visual Studio и Qt Creator, для проектов на Python — PyCharm и т.д.

vimrc не трогал уже пару лет, итак всё устраивает (там чуть меньше 200 строк с комментариями и empty lines).

Я НЕ МОГУ ОСИЛИТЬ VIM

Что ты имеешь ввиду?

Не знаешь базовые команды — бегом в vimtutor или ещё куда.

Не знаешь как сделать что-то более сложное — бегом в google за советами / плагинами.

Не можешь привыкнуть к командам — сноси все остальные editor'ы и оставляй vim.

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

neovim уже допилили до вменяемого состояния. У него, в отличии от vim, в консоли нормально работает ESC

А что с ним не так в vim?

Впрочем, юзаю Ctrl-[ и Вам того советую.

b0r3d0m
()

Причём тут «статус»? Если Vim надо «осиливать», то не надо, пожалуй, есть и другие редакторы. Вдруг Emacs попрёт? В своё время я Вим начал тыкать от любопытства, уж очень странной мне показалась концепция. Втянулся за 2 дня, так и пользуюсь с того века.

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

Сможешь объяснить, чем это радикально лучше :tabe и gt / gT?

Оно не лучше, оно другое. Попробуйте команду :h в виме.

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

не открывать новую табу на каждый файл

Это ещё почему?

Потому, что нужно различать табу, буффер и окно. Таба - это всего лишь группа окон, не больше. Непонимание этого приводит к ошибкам и удивлениям; кроме того не используется весь потенциал vim.

Если тебе нужно открыть 100500 файлов, это не значит, что тебе нужно держать 100500 табов, бесконечно листая по горизонтали. Можно обойтись вообще одной табой. Что удобно.

Если ты не видишь табы с файлом, это не значит, что файл не открыт - он может быть открыт и содержать изменения.

В одной табе может быть показано несколько файлов - каждый в своем окне. Что также удобно.

В разных табах может быть открыт один и тот же файл. Что иногда полезно, если табы имеют разную конфигурацию окон.

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

P. S. Кстати, рекомендую:

nmap <A-Left> :tabprev<CR>
nmap <A-Right> :tabnext<CR>
nmap <A-Up> :bprev<CR>
nmap <A-Down> :bnext<CR>

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

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

mersinvald ★★★★★
() автор топика

По статусу пора уходить от гуёв в голую консоль и если на тайловые wm таки пересел, то с IDE все сложнее

Я осознаю, что хаять VIM на таком тематическом форуме, это тоже самое, что ... бырзгать из шланга против ветра. Тем не менее. Не могу не вставить свои 5 копеек.

«VIM имеет два режима - в одном он пищит, во втором все портит» :) Запомнилось и радует! )))

Я пойму коллег, которые подсели на сей редактор во времена отсутствия альтернатив. Сам до сих пор вырубаю клавишу NumLock, ибо свое становление как программера прошло на 83-клавишных клавиатурах. Что я только не делал!!! Привычку пробить ну просто не могу. По сему никого не осуждаю, привычка дело сильное.

Про редакторы. Идеальнейшим редактором считаю встроенный редактор виндовой оболочки Far. Под *никсами - строго mcedit (от Midnight Commander'а), очень близко, но конечно далеко не Far.

Выше по тексту обсуждения был представлен более чем часовой вебинар по VIM'у. Отслушал 30 минут. Дослушал до команды «точка». Далее меня не хватило. Элементарная запись-воспроизведение макро возводится в степень божества. Бред сивой кобылы. Два режима: редактирования и коммандный. Ну и у обычных редакторов это есть - редактируешь (режим редактирования), вызываешь меню (командный режим). В чем фишка?

А фишка в том, чтобы одни и те же действия осуществлять наиболее минимальным количеством нажатий клавиш. А вот теперь апологетов редактора VIM приглашаю «померяться ... клавишами» по основным операциям редактирования.

Для затравочки:

1) Удалить строку (Ctrl+Y) 2) Удалить слово (Ctrl+T) 3) Заменить строку (Home, Shift+End, набор строки) 4) Найти и заменить (Ctrl+F7) 5) Увеличить отступ (Ctrl+[)

Продолжать пока не буду. Приведите аналоги в VIM. Ради интереса. Хочу посмотреть, что же я теряю.

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

Не, погоди.

Таба — понятно (надо открыть дополнительный файл или группу файлов).

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

Буфферы — ???

Нет, серьёзно. Я читал :h, видел статьи в интернете, но профита от использования буфферов так и не почувствовал. Точнее, не так. Для каждого открытого файла итак создаётся свой буффер, так что я не понял, зачем работать с ними при помощи команд, связанных с буфферами вместо переключения между табами, в которых будет находиться один или больше необходимых файлов. Сразу передо мной, сразу перед глазами.

Если тебе нужно открыть 100500 файлов, это не значит, что тебе нужно держать 100500 табов, бесконечно листая по горизонтали

Зачем вообще может понадобиться открывать в редакторе огромное кол-во файлов?

Если ты не видишь табы с файлом, это не значит, что файл не открыт - он может быть открыт и содержать изменения

Зачем это? Зачем его куда-то «прятать» из UI (я понимаю, что мы его не «прячем», но суть вопроса, я думаю, понятна)?

В разных табах может быть открыт один и тот же файл. Что иногда полезно, если табы имеют разную конфигурацию окон

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

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

1) Удалить строку (Ctrl+Y)

dd

2) Удалить слово (Ctrl+T)

dw

3) Заменить строку (Home, Shift+End, набор строки)

cc

4) Найти и заменить (Ctrl+F7)

Вот это реально пипец :%s/foo/bar/g

5) Увеличить отступ (Ctrl+[)

>>

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

А я никогда и не говорил, что vim нужен для того, чтобы всё делать «быстрее и круче, чем в остальных редакторах».

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

Вот это реально пипец :%s/foo/bar/g

Кстати, ради уж справедливости ... а не регуляркой ли это выражается? Если регуляркой - то, имхо, все ровно.

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

А я никогда и не говорил, что vim нужен для того, чтобы всё делать «быстрее и круче, чем в остальных редакторах».

Не..не..не, я человек неконфликтный. Мирный и тихий. У меня даже пистолет с глушителем )))

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

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

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

В смысле, занести в буфер обмена строку «:%s/foo/bar/g», а потом доставать её оттуда при каждой необходимости замены какого-то текста в файле? Можно, только нафиг надо?

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

Можно, только нафиг надо?

Ну смотри как это решается в FAR'е ...

1) Ctrl+F7 - полуюбому, это вызов поиск/замены

2) Ctrl+H - вызов истории поиска или набор того, что ищем

3) Стрелка вниз+Ctrl+H - вызов истории замены или набор того, чем заменяем

4) Enter - запуск процесса

В VIM, я так понимаю, строку можно формировать из кусков из буфера обмена, если влом набирать все заново. Так?

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

В VIM, я так понимаю, строку можно формировать из кусков из буфера обмена, если влом набирать все заново. Так?

Без понятия, ввожу этот текст каждый раз заново (разумеется, кроме той части, где написан текст для замены — его можно вставить при помощи Ctrl-R ").

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

Про ycm вкурсе, но там само решение тупиковое, растить что то ещё вокруг тупо комплита, это жесть, а если сначала навигабельную модель кода сделать, то комплит сам собой нарисуется. Оно wip, но даже в таком виде смотреть тоннушку говнокода с ним почти так же удобно как в qtc.

Плюс да, эта штука может жить как демон (что с успехом по умолчанию и делает), при этом, можно заморочиться и уже сейчас иметь сетевую прозрачность через тот же socat (по идее, пока не пробовал).

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

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

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

Без понятия, ввожу этот текст каждый раз заново (разумеется, кроме той части, где написан текст для замены — его можно вставить при помощи Ctrl-R ").

Шляпа конечно))) Я года два ваял клиент-серверный проект в QtCreator'е. Но без FAR'а никак. Нет, можно было на Perl'овке конечно что-то наваять. Но поступил иначе. Задача была проста - переформатировать SQL-запрос в C++ код. Создал пакет регулярок:

1) Заменить табы на два пробела

2) Убить комментарии

3) Убить пустые строки

4) Убить концевые пробелы

5) Отквотить кавычки

6) Заквотить строки в Си строки

7) Заменить шаблонные переменные на свои Си-переменные

Решил плагином FAR'а. Всего одно нажатие горячих клавиш - пакет выполнялся последовательно. В результате в редакторе все готовое для вставки в QtCreator. Ну лан ... это так, лирика. Хочу пока убедиться, что мне VIM нужен, но весомых причин не нахожу, увы. Но не теряю надежды )))

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

но профита от использования буфферов так и не почувствовал

Если хочешь почувствовать, поставь для начала какой нить сахар типа Unite с биндингом ctrl_K на поиск по буферам. И потом сравни скорость переключения между табами и методом набора первых букв имени буффера.

Для unite - у меня такой биндинг был:

nnoremap <silent> <c-k>  :Unite file_rec buffer -start-insert <CR>

Для чистоты эксперимента, можешь убрать file_rec (это файлы рекурсивно в cwd каталоге).

Но Unite и иже с ним прост сахар, гольные буффера почти так же удобны, правда похожи скорее на навигацию в vimperator.

Суть в том, что при использовании табов, ты добираешься до редактируемой сущности за линейное время, а при использовании буфферов за O(1).

Upd. про O(1) пардон, нагнал. Но всё равно существенно быстрее (O(log n)) при открытии множества файлов, чем при использовании вкладок.

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

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

I60R ★★
()

Ещё по теме:
поставь Vimperator и плагин эмулирующий Vim для своей IDE.
Мне такая стратегия привыкания очень здорово помогла

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

Чем это лучше ctrlp?

Просто мне так больше нравится, чем в ctrpP. \b показывает список буферов, кнопками jk перемещаешься на нужный. (Кнопкой x удаляешь ненужные). Жмешь enter, список исчезает, открывается выбранный буфер

и почему в ванильном vim работает не так?

В mc ESC тоже не перересовывает. Знаю, что в vim это можно настроить, но в nvim сразу работает.

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

В арчике vim-minimal не собран. А vim тащит с собой Ruby.

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

2) Удалить слово (Ctrl+T)
dw

diw

3) Заменить строку (Home, Shift+End, набор строки)
cc

Shift+s

4) Найти и заменить (Ctrl+F7)
Вот это реально пипец :%s/foo/bar/g

Наоборот удобно (В vimrc должно быть «set incsearch»):

  • Начинаешь вводить поиск /abra. По мере ввода на экране выделяется всё найденное. Жмешь enter
  • Затем %s//cadabra/g (пустой поисковой паттерн заменяется на последний введенный)
makoven ★★★★★
()
Ответ на: комментарий от mersinvald

Так медленнее же. До стрелок руку надо тянуть, а тут просто так печатаешь.

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

О, я кажется тоже до такой стадии дошел. Отказываться от vim-а пока не собираюсь.

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

Кстати, в VIM'e можно ли сделать такую шляпу? И если «да», то как? ... При выделенном блоке нажимаем хоткей, при этом содержимое блока скармливается на STDIN произвольному скрипту, потом читается STDOUT скрипта и прочитанные данные заменяют содержимое блока редактора.

Короч, уже читаю - http://rus-linux.net/MyLDP/BOOKS/Vim/prosto-o-vim-01.html

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

Выше по тексту обсуждения был представлен более чем часовой вебинар по VIM'у.

Предложенный вебинар - говно. Там одна вода, ничего о редакторе толком не сказано.

Элементарная запись-воспроизведение макро возводится в степень божества.

«Точка» - это не совсем запись макроса. Точка, это повторение последнего действия.

Два режима: редактирования и коммандный. Ну и у обычных редакторов это есть - редактируешь (режим редактирования), вызываешь меню (командный режим). В чем фишка?

Фишка в двух режимах. В других редакторах такого нет. Что бы это понять, нужно не слова идиотов «пищит и портит» запоминать, а самому попробовать.

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

1) Удалить строку (Ctrl+Y)

D или dd

2) Удалить слово (Ctrl+T)

dw

3) Заменить строку (Home, Shift+End, набор строки)

S и ввод строки

4) Найти и заменить (Ctrl+F7)

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

5) Увеличить отступ (Ctrl+[)

Тоже масса способов. Если одна текущая строка без выделения, то >>
Если набор выделенных строк, то >
А можно целиком параграф или скоуп, не выделяя его.

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

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

Выделение+удаление вертикальных блоков как решается в VIM?

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

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

По поводу операций в VIM'е - у вас небольшая неточность. Сочетания нажатий клавиш зависят от текущего режима. Если вы находитесь в состоянии набора текста, то, к примеру «D или dd» - не совсем правильно. Вам же потребуется что-то (ESC вроде) нажать, дабы войти в режим команд. Таким образом правка текста будет представлять собой попеременное переключение режимов и набор/исправление символов или символьных конструкций (слов, строк, блоков). Ну на сколько я бегло осилил азы и приведенного мной выше мануала для чайников.

Фишка в двух режимах. В других редакторах такого нет. Что бы это понять, нужно не слова идиотов «пищит и портит» запоминать, а самому попробовать.

Это был юмор, своеобразный. Попробую обязательно. Любопытство берет верх.

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

Никаких соревнований. Беглое сравнение, по верхам.

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

По поводу операций в VIM'е - у вас небольшая неточность.

Нет никакой неточности.

Сочетания нажатий клавиш зависят от текущего режима.

Приведенные сочетания для normal-режима. Редактирование текста производится в этом режиме. В insert-режиме производится набор текста. Вы пытаетесь перенести привычный вам по другим редакторам текста подход на вим. А этого делать нельзя, иначе вы так и останетесь любителем фразы «пищит и портит».

дабы войти в режим команд

Способ входа в режим команд зависит от текущего режима. Режим команд включается по : (две точки).

Это был юмор, своеобразный.

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

Попробую обязательно. Любопытство берет верх.

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

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

diw

Да, тут согласен. Если находимся не в начале удаляемого слова, то dw его не удалит.

Shift+s

Чем это отличается от cc?

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

Там есть небольшая разница:

						*i_CTRL-[* *i_<Esc>*
<Esc> or CTRL-[	End insert or Replace mode, go back to Normal mode.  Finish
		abbreviation.
		Note: If your <Esc> key is hard to hit on your keyboard, train
		yourself to use CTRL-[.

						*i_CTRL-C*
CTRL-C		Quit insert mode, go back to Normal mode.  Do not check for
		abbreviations.  Does not trigger the |InsertLeave| autocommand
		event.
b0r3d0m
()
Ответ на: комментарий от pon4ik

Решил попробовать rtags на OSX. Ставил через brew (как сказано в документации), в качестве зависимости оно потянуло llvm, libcxx и прочее в сорцах.

Как скормить rtags`у список файлов для индексации если система сборки кастомная? Какой формат compile_commands.json?

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