Pull to refresh

Comments 315

Пищало вырвать надо :)
PS: это первый подводный камень.
<шутка>У Vim'а есть два режима, пищать и все портить</шутка> @забылкто
Это было про vi. Народное.
Для того, чтобы в vim'е удалить 5 строк достаточно набрать d5d в командном режиме.
5dd намного проще нажать
Кому как. Мне d5d кажется логичнее и проще.
Еще удобно удалять по номерам строк. Чтобы удалить с 5-й по 10-ю (включительно):

:5,10d
гм. Я тут вижу 6 нажатий клавиш, да ещё надо заметить номер строки, ввести его, потом ввести другой номер строки.
В обычном редакторе я нажму Home, потом выберу первую строку стрелками, т.к. это делается чисто визуально, я это делаю быстрее, мне не нужно тратить мозговые усилия на поиск и набирание цифр. Дальше зажимаю shift и стрелками идут вниз, жму Del.
На мой взгляд это быстрее и проще. А главное намного интуитивнее. Редактор, который требует месяц, чтобы выучить как удалять строки не должен существовать.
Основная фишка вима это передвижения по тексту, можно работать не только с символами, как в обычном редакторе, но и со словами, строками, параграфами, буферами и тд. Вобщем можно выделить строки, делается это без использования Home и Del, эти кнопки на разных клавиатурах располагаются черти где, где-то это удобно где-то нет, использование вима позволяет комфортно работать на любой клаве, даже самой эргономичной или орграниченной клаве.
Ну так для движения по словам можно просто зажать ctrl. А для решения проблемы клавиатуры, я просто купил две одинаковых, удобных мне. Одна на работе, другая дома.
Я понимаю, что это не столь универсально, но всё таки значительно проще :)
Ну не все же ищут легких путей, для меня важна эффективность, а то что приходиться иногда сесть и разобраться это фигня, лучше день потерять потом за пять минут долететь ;)
В итоге реализация проекта занимает день + пять минут. В то время как я своими «обычными методами» решу вопрос за два часа.
Ну так это прекрасная новость. Вы очень продуктивно работаете с текстом и без всякого Вима. И Вим вам не нужен. Как бонус вы экономите месяц времени, который можете потратить на другие, более полезные дела.

Никто ж не говорит «Вим — в каждый дом». Кому нравится — тот пользуется, кому не нравится — тот не пользуется. Мне нравится.

Что касается вашего примера, то мне, например, неприятно было бы жать 10 раз вверх, а потом 20 раз вниз (держа шифт). А вот мозговых усилий мне как-то не жалко. Каждому — свой инструмент.
В обычном редакторе я нажму Home, потом выберу первую строку стрелками, т.к. это делается чисто визуально, я это делаю быстрее, мне не нужно тратить мозговые усилия на поиск и набирание цифр. Дальше зажимаю shift и стрелками идут вниз, жму Del.
Никто вас в Vim не заставляет считать строки, это просто один из способов. Вы можете использовать и режим выделения:

Home нажимать не нужно
Shift+V включает построчный режим выделения
Дальше сколько нужно раз стрелка вниз или j (без шифта заметьте). Если знаете точно сколько строк (ну например если их до 5, то считать особо не нужно, вы просто видите их и знаете, что их 5), то вместо пяти нажатий j можно сократить до 5j
d удалить.

Вроде всё равно получается меньше нажатий, чем у вас.

А ещё в Vim сам режим выделения более гибкий, представьте, например, что вы выделили 10 строк и заметили, что в начало выделения надо добавить ещё одну строку. В обычном редакторе вам придется снять выделение и выделить 11 строк заново. В Vim вы в visual mode нажимаете o и расширяете выделение в другую сторону. Я об этом даже не поленился пост написать 4 года назад :)

Но если вам, например, нужно удалить всё внутри фигурных скобок, то это делается с помощью di{ без необходимости передвинуть курсор к открывающей скобке и выделить до закрывающей. Если нужно удалить блок вместе со скобочками — то da{. Это называется text objects, это очень удобно и экономит массу времени и нажатий клавиш.
С блоками мне понравилось. Поставить что ли vim? :)
Или плагин к Visual Studio какой поискать…
Для Visual Studio есть ViEmu, но как уже заметили тут в комментариях все эти Vim-mode это баловство, в них постоянно натыкаешься на что-то недоимплеменченое, чем в Vim постоянно пользуешься и всё резко тормозится.

Я себе добавил в студии в меню Tools вызов Vim для текущего редактируемого файла, причем при открытии курсор позиционируется на тот же символ, где в студии при вызове находилась каретка. Назначил горячую клавишу и когда я вижу, что что-то мне проще отредактировать в Vim, я нажимаю эту горячую клавишу и редактирую файл как мне удобно. Особенно пригождается, когда нужно файл проекта отредактировать как текст.
Ну, так как я не пользовался vim до этого и не ищу pure vim experience, попробую плагин, если он мне даст несколько доп фишек, вроде удаления блоков, уже будет неплохо.
Он не бесплатный, имейте в виду.
Уже около полугода пользуюсь бесплатным vsvim, проект хостится на гитхабе.
Не, лучше не стоит. Только впечатление портить. Я вот часто правлю код и конфиги на удаленных по ssh через vim. И вот как-то решил поставить его на винду и оценить как он будет редактором по умолчанию. Ужасно!
В Vim можно сделать так: Home или 0, V, стрелка вниз или j, d или Delete
Почти также, как у вас, только шифт держать не надо. А можно выделить кусок текста мышкой и нажать Delete (в гуи, разумеется). То есть можно действовать и более-менее привычным способом.

«Основная фишка вима» — это не перемещение по тексту, а то, что в нем нет хоткеев, а есть команды. Как правило, команда имеет формат [<количество повторений>]<что сделать><область действия или команда перемещения>.
Примеры команд: d — удаление, v — выделение, gU — перевод в верхний регистр, dd — удаление строки.
Команды перемещения: f<символ> — переместиться к символу, j — на строчку вниз, w — слово, p — абзац
Задание области действия (только после команды) a (снаружи) или i (внутри), затем скобка/кавычка, w (слово), p (paragraph), t (tag) и т.д.

Переместиться к ближайшей открывающей угловой скобке: f<
Удалить 5 строк: 5dd (5 раз удалить строку) или d5j (удалить 5 строк вниз)
Выделить абзац: vip (выделить внутри абзаца)
Перевести в верхний регистр текст от курсора до конца слова: gUw

Т.е. достаточно запомнить базовые команды и понять принцип. Приведённого в принципе достаточно, чтобы понять, как удалить всё слово, внутри которого находится курсор.
Мне кажется, вполне интуитивно. Правда, приходится думать, что ты делаешь.
Ну и клёвые фишечки из других комментариев тоже играют свою роль :)
В визуальном режиме это и в vim возможно. Лично я использую оба метода по ситуации. Когда известен номер строки и количество удаляемых строк метод предложенный savados-ом работает быстрее.
А когда вы выделили строк 50 текста мышкой или еще хуже — стрелками, потом заметили, что начали свое выделение не с нужной строки, а промахнулись на одну-две, то ругаетесь и начинаете все сначала (и не отнекивайтесь: такое часто бывает), а в виме нажимаете букву «o», которая Вас перемещается в другой конец выделения, и просто расширяете свое выделение в нужную сторону. Вся суть в мелочах ;)
btw, В Visual Studio есть точно такая же команда:
Edit.SwapAnchor, у меня она назначена на (Ctrl+E, A).
Ух ты! Перехожу на студию!
Лучше всё-таки на вим
тьфу. надо начинать высыпаться%)
А этот пример, про удаление строк — он точно из жизни?

Не проще ли нажать сколько нужно раз ctrl+shift+D, вместо того чтобы сначала, сбиваясь, отсчитать, а потом за один раз сделать как хакер?
Далеко не проще, если вы точно знаете количество строк, тем более, что это делается на автомате.
А откуда я могу знать количество строк не посчитав их?
Вы их видите! А если не видите, то пальцы автоматически нажимают V, быстро выделяют нужные строчки (чаще всего хитрыми командами, а не просто «стрелками») и спокойно удаляют. Никто не говорит, что 5dd — это панацея! Это возможность, которая очень часто помогает, а Вы попросту цепляетесь сейчас :)
Ну через несколько нажатий — такое везде есть. Интересно как в жизни применяется вот это вот «повторить N раз». Как я понимаю пример про строчки все-таки надуманный.
Уверяю Вас: применяется очень часто, но, обычно, это не 5-10 строк, а 2-4, когда глаз точно видит количество, а для остальных случаев есть свои приёмы.
Когда глаза сходу не видят удобно использовать. для повторения команды. тогда удаление 5 строк будет dd… и если удалили больше чем надо, то u будет по одной возвращать строки. если использовать 5dd, то если не угадали с количеством строк u вернёт все 5 строк
после dd не многоточие, а 4 точки, парсер комментариев слишком умный
Из жизни, из жизни. Хотя чаще я использую d) (например, в конфиге бинда просто секцию удаляет).
Тоже сначала удивлялся такого рода штукам: посчитать сколько строк надо удалить, или заменить, но оказалось довольно удобно и продуктивно. К тому же, это применимо не только к удалению, а практически к любой команде, и дико помогает в написании макросов.
Кстате макросы отдельная тема, записываются легким нажатием «q<Буква Макроса><Нужные действия>»(вызов: "<Сколько раз вызвать макрос, например 22>@<Бува макроса>"), экономит кучу времени при рутинном редактировании
UFO just landed and posted this here
vim — это редактор, а не IDE. Кстати, стандартный JetBrain-овский редактор таки можно заменить на vim-оподобный :)
Все «режимы вима» в любых IDE — УГ
Те, кто думают иначе — пользуются вимом только ради вышеупомянутого dd. Более опытные пользователи сразу замечают недостатки эмуляции.
за единственным исключением в виде evil для емакса.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Сначала хотел перевод сделать, а потом добавил отсебятины и решил не указывать, что это перевод. Но в постскриптуме обязательно упомяну, спасибо.
Я когда только начал изучать vim, зашёл в него, и не знал как выйти. Пришлось прибить.
UFO just landed and posted this here
С этого все начинали. После аналогичного случая я просто забил и забыл про него. А потом через пару лет, когда уже пользовался им в течение длительного времени, вспомнил нашу первую встречу, и стало обидно, что я потерял столько времени испугавшись «безвыходного» редактора и «безстрелочного» управления ))
Vim при старте пишет, как из него выйти.
В Vim работает стандартный шорткат F1, там в первых десяти строчках написано, как из него выйти.
Если в Vim нажать Ctrl+C он в статусбаре напишет Type :quit to exit Vim.

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

p.s. вообще то идеология vim шокирует новичков (по себе сужу) немного другим: выбором какие кнопки предложены по умолчанию (а их ведь практически никто в последствии не меняет)…
Сильно не буду вдаваться в подробности… но поиграйтесь с lynx/links посмотрите ЧТО предлагают разработчики для навигации по странице вверх/вниз…
Посмотрите что делает vim при нажатии стрелок на цифровой клавиатуре (это когда сюда еще добавятся особенности разных терминалов по работе с расширенной клавиатурой и функциональными клавишами) — становится грустно. Естественно изучив, разобравшись, и перелопатив гору факов и доков можно допилить, до настроить, но блин новичкам приходится туго.
> Посмотрите что делает vim при нажатии стрелок на цифровой клавиатуре (это когда сюда еще добавятся особенности разных терминалов по работе с расширенной клавиатурой и функциональными клавишами) — становится грустно.
Ничего тут грустного: вим создан для слепого метода печати, руки всегда лежат на нужном месте.
А кнопки и не надо менять. Они очень логичны на самом деле. И очень удобно, что вместо стрелочек можно использовать hjkl — экономится уйма времени на перенос правой руки туда-сюда.

С выключенным NumLock у меня в gVim цифровая клавиатура работает как положено — стрелочки двигают курсор, PgUp, PgDn, Home, End листают куда надо.

Про новичков уже сто раз писали, что да, кривая вхождения очень уж крутая. Ну тут нужно или сделать над собой усилие и окупить потом многократно потраченное время и сломанные стереотипы или сразу же отказаться от этой затеи и использовать другой редактор. Я когда начинал, буквально заставлял себя всё редактировать в Vim, потому что поправить пару строчек занимало в 10 раз больше времени в Vim по сравнению с редактором Far например. Зато теперь всё наоборот.
за использование PgUp, PgDn, Home, End в виме надо бить по пальцам ;)
everyone's first vi session. ^C^C^X^X^X^XquitqQ!qdammit[esc]qwertyuiopasdfghjkl;:xwhat
Продолжая серию шуток про vim:
How do you generate a random string? Put a first year CS student in front of VIM and tell him to save and exit.
Хотелось бы набора упражнений или лабораторных работ для изучения vim. Практика в боевых условиях ни к чему не привождит, потому как надо делать работу а не заниматся изучением. А вот пройти 50 заданий на специально подготовленных файлах — это самое то. Если вдруг кто знает как сотворить такой курс, я бы согласился помочь чем смогу.
В консоли введите vimtutor

PS «все уже украдено сделано до нас» (С)
Еще есть замечательная штука вимгольф. Дается задание по редактированию текста в виме, и нужно за минимальное количество нажатий клавиш его решить. Причем, можно подсматривать решения тех, кто уже решил, но с конца или на ход меньше твоего лучшего решения. Я в свое время очень сильно поднял скил работы в виме, решая эти паззлы по вечерам как кроссворды.
Real Vim ninjas count every keystroke — do you?
Статья могла состоять из одного слова: "vimtutor", и не нужно было этой лишней воды.

Еще совет: попробуйте залезь в вимовский хэлп — это просто сокровище для тех, кто твердо решил стать мастером вима.
Vim пожалуй лучший редактор на сегодняшний день. Перешел на него с TextMate.
В оригинальном топике была именно эта ссылка. Ок, поправлю.
Можно переходить в режим редактирования так, чтобы курсор перешел на следующий символ с помощью a… помогает, если нужно начать писать в конце строки.
Если нужно начать писать в конце строки, то A. Но я предлагаю не пересказывать тут в комментах Tips & Tricks по Vim, а тем более такие базовые вещи. Почему-то половина тредов про Vim скатывается в то, что можно узнать за первые 10 минут вимтутора…
Я об этом узнал спустя неделю использования Vim, часто говорят только о i.
<holywar_mode>
Согласитесь, каждый раз, когда вы видите человека, который использует Vim, вам кажется, что он знает то, чего не знаете вы. Иначе, как вы можете объяснить тот факт, что он использует редактор, который, по вашему мнению, является open-source мусором?

А вот и нет. Мне кажется, что он не знает того, что знаю я. Иначе как объяснить, что я уже перешёл на емакс, а он ещё нет?
</holywar_mode>
Чем вы объясните свой выбор?
Мне кажется тег <holywar_mode> довольно ясно объяснил его выбор ))
Вы знаете, да, вполне. Просто интересно было услышать аргументацию )
В емаксе есть шахматы и психоаналитик.
И прожигалка болванок с помощью бабочек :)
В первую очередь org-mode. В вимовские времена перебирал плагины для туду-списков и довольно долго пользовался taskpaper'ом, но org-mode — это действительно нечто.
Во вторую — ido-mode + tramp.
В третью — лисп вместо вимскрипта. Вимскрипт ужасен, а на руби и питоне, к сожалению, не пишут, хотя можно. Мне кажется, я даже где-то видел рекомендацию не использовать руби/питон, если планируете распространять свой плагин. Что довольно странно, потому что сейчас мало где их нет.
В vim самое сладкое, что есть для меня — это его макросы

Очень сильно может сэкономить время. Да, можно это сделать регэкспами, можно написать обработку на авк\питоне\перле. Но не всегда.

www.oreillynet.com/mac/blog/2006/07/more_vim_save_time_with_macros_1.html

По ссылке хороший пример как файл www.oreillynet.com/mac/blog/images/seuss.txt можно с минимумом телодвижений превратить в html список.

Это хороший пример?
Подобные примеры решаются простым регэкспом, практически в любом современном редакторе.
А макросы к примеру в EmEditor работают на основе Windows Scripting Host, так что на них там чуть ли не целые программы можно писать на JavaScript или VBScript.

Можно какой-то реально полезный макрос на vim, для примера?
Макрос в виме — это повторение действий пользователя, так что в каждом макросе — вся мощь вима. И для них не нужно учить javascript или vbscript.
Макросы в EmEditor точно также записывают и повторяют действия пользователя, только этим они не ограничиваются ;) Примерно так же как в MS Office.
Макросы в EmEditor это помоему не тоже самое что и в виме. В виме макросы это часто штука одноразовая, пишутся по нажатию одной кнопки, запоминаются все действия пользователя, а потом применяются в любом месте, все это делается на лету, не тормозя процесс, и не требуя при этом умения программировать, нужно только знание передвижений в виме.
А чего там тормозить процесс? Нажал Ctrl+Shift+R и EmEditor записывает все действия юзера, еще раз Ctrl+Shift+R остановилась запись, потом Ctrl+Shift+P выполнился макрос. Но это только один из простейших режимов, хотя и достаточный для многих.
Я считал что там макросы в виде скриптов пишутся, но раз так то рад за EmEditor, это отличная функция. Надо будет как нибудь опробовать эту функцию, интересно.
Ну это простой пример на котором все понятно.

Чуть навороченней — из каждых 10 строк удалить каждую 5,7, 8 строки файла
удалить кусок второй строки начиная со второго вхождения буквы «A»

4jfAfADjddjj2ddjj

С регэкспами это сложнее. Никто не спорит, что они мощная штука. Но сложнее. Я вот сходу не вспомню как сделать на регэксах удаление каждой энной строки в файле. А вимовские команды — они уже в подкорке. Написание такого «макроса» это буквально 10 секунд. И это 10 секунд в стиле REPL. Когда ты видишь эффект от каждой команды. «Отлаживаешь» его не отходя от кассы. Верунть все взад — просто нажать 'u'. После того, как макрос записан, ты повторяешь его 100 раз 100@q например.

Писать программу даже на джаваскрипте это дольше.

Более того, регэксп и джаваскрипт с питоном надо дебажить. А в случае с макросами — это удобно.

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

Такой удобной системы макросов не видел ни в одном другом редакторе. Даже emacs при всей своей мощи не дотягивает по удобству.

Такие дела.

Вы не внимательны. Javascript это дополнительная возможность. В простейшем случае, просто запоминаются все нажатые юзером кнопки и команды.
А Вам часто нужно
из каждых 10 строк удалить каждую 5,7, 8 строки файла
удалить кусок второй строки начиная со второго вхождения буквы «A»
?
Когда работал с GPS трекерами надо было достаточно часто.
Или когда недо-csv файл надо было превратить в что-то удобоваримое, тоже было.
Часто ли такое происходило? Не особо. Я собственно серебрянную пулю и не обещал, просто поставил акцент на той фишке которая мне нравится в vim.

Плюс он еще есть практически на любом *никсе.

А по работе я больше все же Visual Studio пользовался да PyCharm.
> Дни напролёт, занимаясь редактированием HTML и CSS, вы поймёте, что Vim — это не то, что вам нужно. С этим фактом не поспоришь. Просто найдите редактор, который придётся вам по душе. Такой, как Coda, например.

Категорически не согласен.
Ваше право. В начале использования вима я был солидарен с точкой зрения автора. Поэтому оставил данный аргумент. Да и не одному мне в начале было «не по себе».
Есть у меня друг — классный верстальщик, работает как раз в MacVim.
Тоже не согласен, vim нужен не только программистам для работы с кодом, его часто использую для работы с текстом.
>Мой vimrc пуст

По началу он и должен быть пуст или почти пуст. Просто редактор объективно требует мало настроек и крутить что-то «чтобы было» без понимания нет нужды.
Всё же вводит в ступор.
>> Пока вы не потратите по крайней мере месяц на ознакомление с ним, вы, несомненно, будете его ненавидеть.

та же история с GIMP.
и это минус, вызванный недостаточной работой над интерфейсом. :(
Причем тут интерфейс? Это другая философия, которая требует изучения. (говорю только про вим)
При том, что «встречают по одежке». По-моему, ненавидеть ПО за его интерфейс — это нормально (привет, налоговая служба этой страны!).
Вилкой тоже не учились пользоваться? ЯП сам в голову залез?)
Спекулируете.
Между вилкой и тем же GIMPом в плане обучения разницы — как между хелло-вордом на бейсике и движком Хабра.
Прошёл vimtutor пару лет назад, теперь пользуюсь vim'ом для правки конфигов, потому что есть везде — перемещение «стрелочками», поиск символов, ну dd — больше ничего не осилил. Проблемы с русской раскладкой опять-таки из коробки (благо в конфигах она требуется крайне редко).

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

Ну и до настоящей IDE ему, имхо, всё же далеко. Прежде всего интеллектуальное автодополнение вроде отсутствует как класс, что-то может предлагать (правда ни разу не видел, хотя какие-то плагины даже пытался ставить, но не работали почему-то), но дико сомневаюсь, что в динамически типизируемых языках он проводит контекстный анализ типа и выведет нужное. То есть если написать $obj = new SomeClass; $obj->, то вряд ли увижу все public члены класса SomeClass и его родителей/интерфейсов. Про «магию» вообще молчу. Ещё не понравилось, что отсутствует концепция проекта. Хотя, конечно «готовить» его я не умею и может всё это есть.
>… больше ничего не осилил
На этом можно было уже остановиться.

> Как-то очень сложно его осваивать полноценно. Читать доки в надежде запомнить хоткеи — глупо. Нормальной справки (выбрал мышкой желаемое действие — увидел что нажать нужно) не встречал. Встроенный хелп странное впечатление производит. В этом отношении программы с меню, которые показывают рядом с пунктом меню его шорткат куда проще изучать. Чисто машинально получается: раз нашел команду — выполнил, второй, третий… Потом надоедает лазить в меню и запоминаешь шорткат. Забыл — подглядел в меню. И справка не нужна.

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

dd же Вы освоили и очень часто используете… разве Вам не интересно, сколько еще вкусностей и быстрых инструментов может предоставить этот редактор? :)
Интересно, потому топики про vim на Хабре не пропускаю и этот в частности. Но не запоминается прочитанная информация, то есть возможности в голове крутятся (в лучшем случае), а когда их нужно использовать, то времени гуглить как удалить 5 строк в виме нету, надо удалять, а не гуглить, быстрее нажать dddddddddd :), хотя и помню, что можно где-то как-то указать квантификатор. Плюс есть «шорткаты» мнемоничные (a ,i, dd, например), по крайней мере для меня, а есть из из разряда «это невозможно понять, это нужно запомнить» (тот же поиск, или перемещение не стрелочками).

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

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

Порог вхождения оправдывается и покрывается с головой уже через пару недель. Надо только принять решение и внимательно пройти vimtutor пару раз, а дальше навыки будут очень быстро нарастать и интерес появится и даже азарт… а потом коллеги, которые поначалу смеялись над Вами, начнут потихоньку присматриваться, пробовать и даже пересаживаться на вим… и постепенно мы захватим весь мир! Не сопротивляйтесь эволюции :))
Столкнулся с этой же проблемой когда начал изучать(где-то месяц назад). Но меню, боюсь, не спасёт. Надеюсь на cheat-sheet. В своё время, когда осваивал консоль в ubunt, поставил cli-cheat-sheet на рабочий стол. Помогло :)
Хотите совет? В течение нескольких дней, когда работаете, обращайте внимание на повторяющиеся действия, которые Вам приходится делать, а потом отправляйтесь искать, как это сделать быстрей (обычно пара-тройка клавиш), и заставляйте себя пользоваться новыми знаниями. Достаточно пары дней, чтобы пальцы запомнили новые сочетания и трюки.
Я наверное не требовательный vim пользователь, мне и стандартного автодополнения хватает :)
Он у меня ни разу вообще не автодополнял, сколько не писал в нём код на php, python или ruby. Всё ручками приходилось писать, ни одного предложения что-то дополнить не было. Бог с ними с членами класса и переменными, но даже ключевые слова типа class или function не предлагает дополнять.
Автодополнение — тема для отдельного холливара, не приплетайте это сюда ))

PS. Про автодополнение в питоне вообще грех упоминать при наличии открытого интерпретатора в соседней консоли
Чем поможет консоль? В ней-то дополнит, а потом копипастить мышкой?
А головой кто думать будет? Кто будет запоминать и учиться? Так нас роботы и поработят в 2040 году :(
Так я хочу, чтобы среда разработки (интегрированный комбайн или юникс-уэй набор инструментов — не суть) оставляла мне только одну функцию — думать :) На настоящем этапе развития техники хотя бы чтоб избавило от необходимости запоминать вещи, не относящиеся к бизнес-логике и архитектуре.
Передумал писать большой комментарий. Мне Вас все равно ни в чем не убедить :)
«А еще я туда ем ...» (с) хз кто
Автокомплит нужен хотя-бы для того, чтобы опечаток меньше было.
С этим нет проблем: контекстный автокомплит в виме отлично работает, и его (по крайней мере мне) хватает.
C+n обычно вызов автодополнения, дополняет как по плагину для языка, так и по словам из файла\соседних файлов, вроде еще в зависимости от статистики выбора тех или иных вещей в авто дополнении изменяет приоритет (порядок в списке) подсказок.
Шорткаты там вполне логичные по-моему. После вимтутора вроде должно было появиться понимание как они работают. И потом в меню же шорткаты для каждого пункта указаны (если они существуют). Я правда меню в виме не пользуюсь, но специально включил проверил — шорткаты на месте.

Про хелп — :helpg есть, это help grep он ищет не только по ключам статей а по тексту хелпа полностью.

Что до IDE — так Vim это не IDE ни разу, это просто мощный текстовый редактор.
А в виме есть меню? O_o
:set go+=m в gVim. Но это не путь самурая. Там и тулбар есть :set go+=T
Подозреваю,, что он гном и иксы за собой на сервер потянет :)
Ну у вас на хост системе то наверняка есть иксы. Редактируйте файлы по ssh:// с хоста.
Надо будет попробовать извратиться.
К сожалению, он есть не везде, в какой версии минимальной Бубунты (или ОС Х) был только nano.
Утрировал насчёт «везде».
А в nano есть CTRL+k для удаления строки.
это не в нано, это библиотека readline. Стрл+А\Стрл+К, Стрл-Е и т.п. есть во всех стандартных интерфейсах включая коммандную строку.
>> Ну и до настоящей IDE ему, имхо, всё же
далеко.

Ничего, что это редактор?
Часто он позиционируется (в «блогосфере») как замена IDE (а emacs так и ОС вообще :) ).
IDE emacs и vim заменяет только с дополнительным внешним инструментарием. Что никак не делает такой подход менее удобным, а зачастую и более за счет снижения семантического шума и подхода «вижу только то, что нужно в данный момент».
Опять же, не попадался GUI/TUI инструментарий навигации по проекту, кроме как в IDE.
Для вима самые популярные — NERDTree и project. Для емакса — ecb.
Но опять же, сам подход сильно проигрывает правильному семантическому поиска аля Sublime Text или Resharper.
Ну и до настоящей IDE ему, имхо, всё же далеко. Прежде всего интеллектуальное автодополнение вроде отсутствует как класc


Зависит от языка, например для python есть хорошее дополнение и рефакторинг. Для javascript ничего интересного не нашел, есть простенькое из коробки по словарю, но это конечно же не то. С другими динамическими языками в виме не работаю.
Про питон — это вы rope и ropevim имеете в виду? Они у вас правда хорошо работают? Я просто повозился, помучился, нашел там баги, попереписывался с автором. Но в результате у меня прижился только AutoImport
Ну вот как минимум нашел одну старую багу. Rope до сих пор считает что документация к питоновскому коду может быть только ascii и никаких юникодных символов там быть не может. (
Для питона вообще всего этого не нужно. Есть интерпретатор. Этого вполне достаточно, уверяю Вас.
Да я не жалуюсь. ) Просто было интересно, может быть что-то в мире новое изобрели, а я и не заметил.
Хотя насчет ничего не нужно, не соглашусь — pylint в виме, например, делает жизнь намного приятнее.
Четыре года использовал vim как IDE для программирования на плюсах
Если не секрет, из под какой операционной системы велась разработка?
Кажется мне что из под Windows для проектов на C++ больше студией пользуются.
Интересно было бы знать статистику использования Vim по операционным системам и языкам программирования.

И, не холивара ради, если есть опыт использования студии, хотелось бы услышать основные преимущества Vim перед студией.
Для статистики:
из-под windows, C++, целевая платформа: Embedded.

Сейчас использую VIM совместно со студией, вызываю по горячей клавише для быстрого сложного редактирования.
Для меня основные преимущества именно в качестве редактирования: когда в редакторе VS делаешь что-то большое, очень не хватает команд VIM, прямо раздражение какое-то испытываешь.
А как IDE VS+VisualAssist меня больше устраивают в плане навигации по большому проекту.
Сейчас использую VIM совместно со студией, вызываю по горячей клавише для быстрого сложного редактирования

Что подразумевается под сложным редактированием, добавление метода класса с несколькими членами класса с последующими рефакторингами с переименованиями методов и выделением отдельного класса это уже сложно или нет?

И я так понимаю что Vim Вы вызываете для редактирования одного файла? Но ведь в проектах на C++ одновременно редактируются около 4-х файлов (MyClass.h + MyClassImpl.cpp + MyClassUsage.cpp*N + MyClassUnitTest.cpp)
Вы постоянно переключаетесь между студией и Vim, или MyClassImpl.cpp редактируете в Vim, а остальные в студии 0_o?
Вы постоянно переключаетесь между студией и Vim, или MyClassImpl.cpp редактируете в Vim, а остальные в студии 0_o?


Я нажимаю горячие клавиши и у меня открывается gVim в том же месте, где я находился.

Что подразумевается под сложным редактированием?


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

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

Другой пример, иногда требуется переколбасить громоздкий код, тогда просто удобней то, что много регистров копирования и то, что VIM понимает объекты типа внутри фигурных/круглых скобок, можно накопировать нужных участков и расставить их как надо.

Больше трёх регистров я использую только для макросов.
Под Fedora. Альтернативы там были не очень — Eclipse, который, кажется, в последнее время дозрел, и NetBeans.
Студию полируют достаточно давно, и, видимо, там хороши живётся, но Windows-программирование для меня всегда было темным лесом.

Единственное, чего я не понимаю, так это людей, которые пытаются писать на Java в виме.
На протении пары месяцев пытался подружиться с вимом — не взлетело. Зато когда я ушел на емакс…
ИМХО, вим больше для админов, конфиги править.
Я пару дней его покрутил, после чего прошло несколько месяцев. Решил посмотреть опять на него… и знаете, мало того, что я приручил его, так я в него еще и влюбился.
Я параллельно и очень много работаю в VS2010. Оказалось, что у емакса и студии мало того, что похожие базовые принципы, так еще и кейбиндинги многие совпадают/близки.

А вим никак не взлетает именно из-за другого воркфлоу. Хотя на задачах типа «быстро поправить конфиг» он меня не пугает и удобнее, чем нано, например.
Говоря о сложности познания vim, нужно упомянуть о сложности emacs. Когда решил найти легковесный, мощный редактор для JS\HTML\CSS сначала попробовал второй (до этого уже имел опыт с vim, как редактором для shell скриптов), и просто ужаснулся, спросил знакомого гика, тот сказал, что если нет желания пилить все и вся под себя вплоть до переделки шорткатов, то лучше даже не начинать им пользоваться. Перешел на gvim поставил 6 плагинов, прочитал немного татур — все. HTML вполне себе неплохо редактировать, но да соглашусь в WebShtorm из коробки лучше поддержка, но думаю если поискать плагины то и в Vim можно решить эту проблему.
Гик Вас обманул. Так ему и передайте.
Если не хочется сразу пилить под себя, достаточно поставить один пак — github.com/technomancy/emacs-starter-kit

А в 24 емаксе почти все это уже есть из коробки.
Кстати, всем желающим начать наиболее эффективно использовать Vim настоятельно рекомендую не пожалеть времени и посмотреть видео Брама 7 Habits For Effective Text Editing или хотя бы прочитать. Это кстати не только к Vim относится, принципы универсальные.
Вопрос к знатокам — существует ли какой-нибудь консольный редактор, который по управлению и горячим клавишам максимально приближен к привычным большинству текстовым редакторам вроде notepad++, bred, sublime-text-2. Просто тратить 30 лет жизни на изучение VIM-а только для того, чтобы изредка в нём править конфиги по SSH несколько не логично, а более простые редакторы, вроде jed или nano также имеют old school управление, которое мне совершенно чуждо. Пробовал mcedit — не то, напоминает редактор паскаля, которым приходилось пользоваться в школе, страшно неудобно.

Не так давно открыл для себя sublime text 2, и с тех пор души в нём не чаю, лишь немногое доставляет дискомфорт (например, то что всё таки это просто редактор и полноценного автодополнения ждать от него не приходится, так же как и подсветки ошибок синтаксиса языка на лету). Но увы, он не консольный.
30 лет это вы сильно преувеличили. Через пару месяцев будете уже вполне сносно редактировать ;)
Угу, но это слишком большая цена, для тех задач, которые я бы мог ему поставить ) На данный момент, в качестве основного не IDE-редактора, я остановился на sublimetext2, и уже минимум месяц над ним колдую. Полагаю, что полный путь до дзен займёт год или два.
Я упомянул nano как редактор старой закалки, потому что решительно не вижу в нём ничего от привычных мне редакторов.
попробуй sed, для редактирования конфигов подходит, и да он консольный :)
Эм, насколько я понимаю, «sed читает указанные файлы или стандартный поток ввода, если файлы не указаны, вносит правки в соответствии со списком команд и записывает результаты в стандартный поток вывода». Вы это имеете ввиду?
Ок, я слишком noob пока, чтобы понимать unix-шутки :)
Emacs как ни странно.
Выделение текста почти такое же, но всё остальное отличается.
Переназначить несколько кнопок — 15 мин.
А вы поменьше читайте всяких бредовых статей.

Научиться редактировать текст в виме можно за 10 минут.
Все что нужно, это знать, что текст вставляется в режиме вставки (insert, включается кнопкой i), а команды вроде сохранения файла — в нормальном режиме (normal, переход из вставки клавишей escape). Ну и шпаргалка вроде такой может пригодиться: www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Гораздо больше времени понадобится, чтобы редактировать текст эффективно, не в духе блокнота, а в духе вима. Но это все по желанию, не хотите использовать его на полную мощь — и не надо, заставлять никто не будет.
Ок, но какое это имеет отношение к моему вопросу? :)
Непосредственное :)

vi/vim — отличный выбор для редактирования конфигов. Особенно с учетом того, что vi всегде везде есть по умолчанию.
Ок. Есть такое редактор — jed. Он очень примитивный, использую его для той самой редкой правки конфигов. Я до сих пор не запомнил как там вырезать и вставлять текст. Забывается почти сразу же, так как я не админ, и по конфигам ssh лазаю редко. Vi\vim в разы сложнее, следовательно, для специфики моей задачи нет ничего хуже vim-а. Разве я не прав? Это же не велосипед, когда 1 раз проехался, и на всю жизнь навыки остались. Тут нужно длительное привыкание, о чём в сим топике уже не раз говорили.
Нет, это негодная, ошибочная логика, когда речь идет о vi.

Я вижу, без примеров из жизни не обойтись. А их полно, взять хотя бы сцену из известного фильма: www.youtube.com/watch?v=dFUlAQZB9Ng. А теперь представьте себе, что бы было, если бы героиня не знала vi?
Возможно ли с помощью плагинов сделать vim таким же функциональным, как продукты от JetBrains (PyCharm, IDEA, ..)?
Можно, но не всегда нужно, но Вы в это не поверите. :)
Действительно не поверю, что не нужна навигация по проекту и подключаемым библиотекам/фреймворкам. Вероятно, для этого нужен полноценный синтаксический анализатор, строящий графы зависимостей сущностей языка и проецирующих их на ФС. А писать такой анализатор как плагин для vim, имхо, сильно нетривиальная задача, особенно для языков у которых формальных спецификаций-то нет толком.
Для руби вполне годный, а вот в рубимайне излишен искать нужную функцию скролом уходит секунд 10, 2 секунды задержки, и еще хэш там надо периодически сбрасывать, чтобы все пересчиталось…
пригляжывался к PyCharm, паралельно смотрел интересные фишки которые можно реализовать у себя в vim, сразу понял что не все можно реализовать, но и нужного в PyCharm оказалось очень мало
Вот в том то и вопрос, что в итоге большая часть работы сводится к редактированию текста, а ответ тут очевиден… :)
Ещё навигации много и чтения. Пока найдёшь место куда свой «костыль» забить…
Что-то я уже запутался, Вы вообще «за» или «против»? )) Не понимаю, к чему Вы клоните :)
За или против чего? :) vim хороший (хотя и сложный) редактор, но на роль IDE он всё же не тянет из-за отсутствия средств навигации по проекту, что составляет немалую часть трат времени при разработке чего-то сложнее hello world.
Я бы на Вашем месте это так смело не утверждал :) Во-первых, Вам уже говорили, что с навигацией по проекту проблем нет: их видите только Вы. )) А во-вторых, я уже долго занимаюсь разработкой очень не маленьких проектов, используя только вим и консольные утилиты, причем бывает, что проекты начаты не мной, и надо в них разбираться, и опять же никаких неудобств не испытываю :) Поймите, что даже не имея чего-то «иде-ешного», пользователи вима никогда с него не уйдут, потому что суть его в удобстве редактирования, которое не предоставит никакой другой инструмент.
Не только я даже в этом топике обратил внимание на эту особенность. Я не спорю, может в комбинации с консольными утилитами он и дотянет (почти — по Вашим словам) до функциональности IDE, вернее в чём-то переплюнет, а в чём-то будет отставать, не исключено, что заметно. Но это, во-первых, ещё сильнее повышает порог вхождения (надо ещё и утилиты изучать), а, во-вторых, уже обычный субъективный выбор между плюсами и минусами. То есть плюсы и минусы объективны (допустим), а вот веса у них точно субъективны. Для кого-то удобство редактирования важнее, для кого-то автодополнение, кто-то руки от клавиатуры не хочет отнимать для навигации, кто-то от мышки.

Плюс лично у меня память плохая, вернее какая-то избирательная, помнит не то, что нужно, например где-какая клавиша на клавиатуре секунду где-то вспоминаю (соответственно вслепую знаков 60 в минуту печатаю только, а глядя на неё — знаков 300), а какой-нибудь хитрый шорткат в браузере, которым раз в месяц пользуюсь типа Ctrl+Alt+R помню, потому что постоянно его вижу в меню. И запоминать шорткаты, простите — команды, vim у меня плохо получается, зубрить даже пробовал. Аналогично, например, с функциями PHP и их аргументами — без подсказок никак, а увидев даже неполный список тут же вычленяю нужную взглядом или даже соображаю на сколько скроллить, а так полчаса могу вспоминать нужна мне asort, sort или array_sort, причём помню что одной из них точно нет, а две оставшихся по разному относятся к ключам, тут вообще без мана не обойтись. А какую-нибудь ерунду типа номера машины соседа, которого даже по имени не знаю — запоминаю и узнаю где-нить в городе.

есть замечательная штука:
github.com/klen/python-mode
она + NERDTree + github.com/lambdalisue/nose.vim + www.wana.at/vimshell/
а так-же bitbucket.org/agr/ropevim (в python-mode уже есть, там хэлпы по кей биндингам)
На освоение этого комбайна ушло пара дней (день и ночь точнее, сам уже давно использую vim)
Зато это даёт весь нужный функционал PyCharm и даже больше (рефакторинг, детектинг ошибок при сохранении файла, автокомплит, поиск, переименование, python shell, просто шелл, запуск\редактирование юнит тестов по одной клавише, соответствие pep8). Дополнительно vim не подвисает на больших python проектах и не тормозит как это делает pycharm.
UFO just landed and posted this here
Есть интересный проект — Eclim.
С его помощью можно скрестить Eclipse и Vim: текст редактируется с помощью Vim'а, но тем не менее можно пользоваться практически всей мощью самого Eclipse.

Впрочем, плотно поработав как в Intellij Idea, так и в Vim с Eclim, все-таки выбрал Idea. Редактирование текста в vim'е, конечно, круче, но скорость разработки в Idea суммарно выше.
Возможно, но придется их сначала написать.
А пронумеровать по паттерну он умеет так же как аналогичный режим в емаксе?
4-5 аккордов против одноко в IDE (переименовать/заменить в выделенном). Наверное, это — удобно.
Замена в выделенной области тоже есть, но это не самые удобные штуки, гораздо интересннее макросы или «точка» например, вот подобных возможностей и не хватает во всех остальных редакторах, из-за них не могу перейти на другой редактор((((
:1,6s/object1/foo/g

^- что вы скажете на это? :-)
Перед изучением vim следует освоить классический слепой десятипальцевый метод набора?
Не следует, но он в разы повысит эффективность вима.
Тоже подозреваю, что отчасти мои проблемы в изучении вима от «полуслепого шестипальцевого метода».
У меня есть три вопроса:

1. Скажите пожалуйста ­— как в vim'е выделить подсветкой все слова в тексте, совпадающие с тем, что под курсором? 2. И как снять подсветку?

3. Как всё-таки подружить его с русскими буквами? Что бы для использования «магических клавиш» не нужно было бы каждый раз менять раскладку.
  1. :set lhs
    *
  2. :nohls (одноразово) или :set nohls (навсегда)
  3. :help langmap
    :help keymap
В 1. опечатка — надо :set hls (сокращение от hlsearch)
1. *
2. :noh (обычно вешается на сочетание)
3. Есть, как минимум, два способа, и оба очень легко находятся в гугле. Не ленитесь.
1. Просто *, ищет в файле слово под курсором, плюс нужно включить подсветку :hlsearch
2. :nohlsearch для выключения подсветки
3. :set keymap=russian-jcukenwin и использовать <C-^> при вставке
Вот ещё бесят в различных материалах сочетания клавиш не с привычными Ctrl, Shift, Alt и Win, а непонятно что :)
Это не «сочетания клавиш», это «команды».
Это потому что не на всех клавиатурах Ctrl — это Ctrl.
Вы про С- вместо Ctrl- и S- вместо Shift-? Так это просто сокращения, неужели прямо насколько сложнее читать из-за них?
Сложнее. <C-^> — это Ctrl+6, Ctrl+Shift+6, или Ctrl+<неизвестное-мне-сокращение-^>? Или Escape+<^>, потому что в линуксах esc ведёт себя очень странно и непонятно?
:help notation
:help <>
:help CTRL-^
:help CTRL-6
Там вроде всё растолковано.

В частности:
Mostly the ^ character is positioned on the 6 key, pressing CTRL and 6 then gets you what we call CTRL-^.
But on some non-US keyboards CTRL-^ is produced in another way.
vim ужасен. Он годен на то чтобы быстро отредактировать один файл, если ты точно знаешь где он лежит и как называется. Очень неудобно ориентироваться в дереве каталогов.

Во всех нормальных редакторах я могу сохранить документ одновременным нажатием Ctrt+S, а отменить сделанное Ctrl+Z. Это Всего две клавиши делается очень быстро. В vim это уже делается гораздо сложнее, давайте посчитаем. Мы находимся в режиме редактирования и нужно сохранить файл, нажимаем «esc», ":", «w», «enter», «insert» — пять клавишь вместо двух. Теперь смотрим отмену — «esc», «u», «insert».
Причем в нормальных редакторах мы нажимимаем две клавиши одновременно, а тут 5 или 3 последовательно, что соответственно в 5 и 3 раза медленнее.

Приведу сравнение нескольких операций для сравнения:
Ctrt+S vs esc, :, w, enter, insert
Ctrl+Z vs esc, u, insert
Ctrl+C, Ctrl+V vs. esc, shift+v, esc, p, insert
Ctrl+F vs esc, :, ..., insert

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

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

Автодополнение работает крайне плохо, и т.д и т.п.
Странно у меня сохранение тоже на Ctrt+S, юзай map, люк.

Насчет отмены, вот меня бесит что в обычно редакторе для того чтобы отменить действие мне нужно нажать Ctrl+Z столько раз сколько символов ввел до этого, например начал писать код и пока писал придумал вариант получше, в виме просто Esc и u, все отменить.

Меня табы бесят, а вот разбиение экрана на части жутко радует, тут дело вкуса, юзай табы, опятьже.
Вы какую-то ерунду написали, к тому же неправильно.
Во-первых, программисты — не писатели. Большую часть времени они редактируют текст, а не пишут новый. Поэтому основным режимом является командный, а значит, не нужно нажимать esc и i. А значит, ctrl-z из двух клавиш превращается в одну.
Копирование-вставка описана неверно. Про поиск я вообще молчу — что за троеточие? Видели звон, да не знаете, где он? Поиск делается одной клавишей — /, а с доп. опцией в конфиге он ещё и инкрементальный. Слово под курсором тоже ищется одной клавишей. Напомните, как с этим в нормальных редакторах?
Открывать 10 файлов в одном окне никому и в голову не придёт. Представьте себе, в виме можно иметь стопицот открытых файлов и в один момент времени редактировать один конкретный, а не все в крошечных сплитах. Привет, табы!
>Во-первых, программисты — не писатели. Большую часть времени они редактируют текст, а не пишут
> новый. Поэтому основным режимом является командный, а значит, не нужно нажимать esc и i. А значит,
> ctrl-z из двух клавиш превращается в одну.

Вы не пишите код чтоли? О_о
А что вы делаете? Только ищите и сохраняете?

Даже если предположить, что программисты не пишут код а редактируют, разве не для этого режим редактирования нужен?
Не для этого. И это не режим редактирования, а режим вставки: insert mode.
С названием режима я ошибся, но не в этом суть.
Когда мы захидим в vim мы находимся в командном режиме, мы не можем редактировать или вводить текст.

Если ваше кодирование сводиться к копипасту — скопировал кусок вставил, то этот режим подходит, но это не программирование.
А Ваше кодирование сводится только к вводу текста? Я Вам завидую, Вы — гений: умеете писать все с первого раза. Может, Вы и отлаживать в уме умеете? :)
Редактирование состоит в том, чтоб перемещаться по тексту, что-то копировать, что-то удалять, что-то заменять. Это отличается от непрерывного ввода текста. Разница именно в количестве времени, которое вы тратите на ввод и на прочие операции. Сама концепция разных режимов основывается на том, что для разных операций нужны разные кнопкосочетания.
Все, что Вы перечислили делается за миллисекунды на автомате.

> Вобщем любые стандартные операции в vim требуют большего количества операций
А это вообще бред :) Но спорить не буду… Пройдите vimtutor :)
Если нужно редактировать одновременно несколько файлов — то удобнее сплитскрин. Если нужно быстро перейти к нужному файлу/месту — удобнее правильный поиск. Табы не нужны.
Я спилы использую и для редактирования одного файла, чтобы сразу смотреть в несколько мест.
Табы тоже бывают нужны. Относительно недавно начал ими пользоваться в виме. Например, в одном табе работа с несколькими сплитами по одной задаче, а в другом — такая же ситуация по другой.
Табы в виме это тоже тот еще холивар. Мне табы трудно контролировать в рабочем раше, уже к обеду 100500 набирается, а вот сплитов максимум 9 набирается, на большом мониторе, дальше тесно и мешает просмотру, вобще в один прекрасный день, взял и запретил в настройках использовать табы, тоже самое и со стрелками))
Просто у каждого вырабатывается свой стиль работы. Все-таки не зря же этот функционал есть в редакторе. Я поэкспериментировал и нашел для себя новые возможности, забиндил клавиши и стало удобней решать некоторые задачи. Хотя раньше тоже избегал табы в виме.
Я для разделения задач использую виртуальные рабочие столы. С учетом того что редактор у меня всегда в полноэкранном режиме, получается то же самое, но места на экране под табы не тратится.
Рабочие столы — это глобальные задачи, типа: браузер, работа, IM и т.д. Так что вовсе не то же самое. :)
Под табы тратится всего одна строчка, где прописаны имена табов.
Ну да, глобальные. А зачем держать одновременно несколько локальных?
Что за вопрос? :) Десяток открытых файлов в виме — это обычная ситуация. И при этом их можно аккуратно раскидать по табам, в каждом из которых удобно расположенные сплиты под конкретную задачу.
В таком контексте в принципе согласен. Но лично мне очень редко приходится сплитить один и тот же файл.
Я за всю жизнь раза два всего сплитил один файл. Это в большинстве случаев — ни к чему при наличии удобных механизмов перехода, типа '. и '', маркеров (ma 'a) и fold'ов.
А в сплитах у меня всегда разные файлы.
Да что Вы у меня зачастую в EmEditor открывается открыто больше 2 десятков файлов, так что сплитскрин отдыхает, если он мне понадобится я его включу, а так — табы рулят.
Ээээ? А как связан сплитскрин с табами? У них немножко разное назначение.
Сплитскрин — чтобы видеть сразу несколько файлов.
Табы — чтобы быстро перейти к нужному файлу.
Я и говорю, что в той же студии с решарпером быстрее нажать Ctrl+T и ввести три буквы из названия класса/функции, чем тянуться мышкой к табу или перещелкивать Ctrl+Tab до нужного места.
у меня вим иногда по неделе не закрывается, файлов открытых более двух десятков тоже, а вот сплит скринов при этом открыто от 2 до 9, буферы рулят))
Позволю не согласиться. Да, некоторые сочетания сперва пугают. Но через пару месяцев всё делается на автомате. Я набираю :wi не настолько медленнее, как ctrl+s, до которого ещё надо тянуться мизинцем (эксейп у меня на капсе висит, поэтому никаких проблем не испытываю).

Ctrl+Z vs esc, u, insert

Не совсем понятен кейс. Если вы находились в режиме правки и решили что-то отменить, то, скорее всего, вы отменяете то, что сейчас написали. Это можно стереть с помощью ctrl+w не покидая вставку. Если же вы только что перешли в режим вставки и вам показалось, что стами строками выше допустили опечатку, то для начала вам необходимо будет посмотреть, действительно ли это опечатка, прежде чем делать undo. В обычном редакторе вам придётся для этого скроллить мышкой/pgup/pgdown, в виме же — ctrl+o.
Да и вообще, esc нажимается на автомате, вы даже этого не замечаете, плюс к этому, как мне кажется, ваши примеры в большинстве случаев просто надуманы без реальных ситуаций — в том плане, что вы, судя по примерам, всегда находитесь в режиме вставки, прежде чем производите какое-либо действие, будь то вставка (кстати, в insert mode её можно сделать через ctrl+r * ) или навигация по коду.

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

Если мы говорим о vim, там есть табы. И в гуи, и в консоли. Однако, все удобства табов нивелируются при одновременной необходимости работы с 15-20 файлами. Тут как раз на помощь приходят буферы с разделением экрана и всякие плагины для навигации по ним типа FuzzyFinder (офигенный плагин. кстати говоря; с ним найти нужный файл среди сотни открытых не составит никаких проблем). У меня, например, на работе вим поделен на две-три вертикальных колонки (монитор 1920): одна для активно редактируемого файла, другие — либо для менее редактируемых, либо для подсмотра какого-то кода.
СОВЕТ
Попробуйте вместо Esc использовать jj для выхода из режима вставки.
Давно привык к этому методу: выполняется намного быстрей, потому что палец уже лежит на j; исчезает проблема задержки после Esc в консоли (в баше Esc — функциональная клавиша, поэтому консоль ожидает пару секунд после нажатия); и Вы не встретите ни одного слова, в котором подряд идут две буквы j, так что с текстом проблем не будет.
Что-то у меня не работает.

timeoutlen=10 ставил, vim 7.3
Это еще зависит от эмулятора терминала, которым Вы пользуетесь, потому что это таймаут не вима, а терминала. Я не стал заморачиваться по этому поводу и сделал то, что предложил в совете выше.
По Undo. Ну вот к примеру нужно в конфиге временно поменять сервер MySQL, прошелся исправил хост, юзера, пароль, базу, сохранил, протестил, потом вернулся к файлу и несколькими Ctrl+Z вернул прежние настройки. Что для этого нужно сделать в vim?

Что касается табов, отлично с ними работается. Довольно часто много десятков табов открыто в EmEditor. У него куча настроек касающихся табов, в том числе сортировка по активности. Так можно легко делить экран на части, настраивать синхронизацию прокрутки и т.п.
Что для этого нужно сделать в vim?

Нажать u
В виме можно просто написать :earlier 10m, отменяться все правки сделанные в последние 10 минут. Но вообще я этим не пользуюсь, вот зато есть дерево правок :undolist по которому можно перемещаться. Дерево, значит команда undo не линейная, это привет от КО :)
Что-то не совсем понял как по этому undolist можно перемещаться. Да и дерева не увидел, написано 12 правок, и что дальше?
Дерево будет напечатано, если сделать :echo undotree()

Команда :undol показывает листья дерева, первое число — номер правки, всё время возрастает. Второе число — количество правок, сделанное для достижения этого листа из корня.

Перейти на нужную ветку можно командой :undo номер_правки.

Движение во времени тоже может поместить в другую ветвь.
Уже несколько лет пользуюсь Vim и жутко не хватает автодополнения для PHP уровня Eclipse. Я, конечно, уже давно смирился, но может кто-то обладает этим тайным знанием и даст волшебную ссылку?
Посмотрите на eclim. Eclipse правда все равно придется держать запущенным.
А вам удалось от него добиться корректной работы автодополнения? А то у меня что-то так и не вышло где-то год назад.
Я его не настраивал никогда, просто знаю, что такое существует, вот и подбросил ссылку.
Самое полезное чтиво про VIm — это vimtips, там действительно полезные штуки перечислены.
Ради интереса провел свой любимый тест редакторов. Имею довольно часто дело с большими SQL-дампами. Скачал gVim для винды. И попробовал открыть дамп на 6,3 ГБ (ну такой не самый большой), vim отожрал 2 гига памяти и умер.
EmEditor (который юзаю, как основной, быстрый и всеядный редактор) открыл весь файл легко и непринужденно, сожрав около гига памяти, при этом он в отличии от vim открыл файл с подсветкой SQL, и позволяет крутить вертеть этот дамп как душе угодно, без тормозов.
В виме на все есть свои трюки ), причиной смерти вима скорее всего не верные настройки
Век живи — век учись. Я вот был уверен, что для больших файлов Вим таки не предназначен, а оно вон как.
Там большие файлы несколько других порядков, если 10 МБ это считается большой, то что говорить о 6 Гигах?
В моем случае это не помогло. Vim также выпал в осадок, создав еще свой swap файл на 2 ГБ.

Хотя у EmEditor в этом плане по-моему вообще нет конкурентов.
Там в рецепте же swapfile отключается.
swap-файл создается, после того как он съедает 2 гига памяти. Т.е. вполне возможно если бы файл был гиг, то swap бы и не создавался.
Да, EmEditor решает. К сожалению, официально он стоит дикие тысячи рублей.
Пошел почитал про этот редактор, оказывается еще и винду нужно будет для него покупать, блин :) Вобщем для меня не вариант, я не готов отказаться от линкуса ради редактора, буду дальше мучатся с вимом))
Ну в плане всеядности у него нет равных, так что 40 баксов рабочий инструмент не такие большие деньги. В конце концов он помогает заработать значительно больше. Те же изделия JetBrains тоже не бесплатные, но они того стоят.
часто вы редактируете файлы по 6gb? не лучше ли использовать скрипты и консольные утилиты
Я их не редактирую, но вот просматривать нужно весьма часто. Понятное дело мне не нужно просматривать всё, но пару беглых взглядов на файл в нескольких местах нужно сделать. И ждать пока софтина пытается минут 10 его открыть мне не очень интересно. Поэтому я предпочитаю всеядный редактор, который открывает всё, любых размеров, а не смотреть сначала на размер файла и думать, чем открыть файл.
Это для тех случаев когда знаешь что нужно искать. А мне, к примеру, нужно посмотреть не битая ли кодировка внутри SQL файла, и если да, то как именно, поскольку в этом деле уже большой опыт, достаточно беглого взгляда на файл, что вы будете искать с помощью grep, если Вы видите файл первый раз в жизни, и ничего конкретного вы там не ищите.
Есть такое дело, Vim к сожалению грузит весь файл в память :(
Блин, ночью плохо спал, все думал зачем может понадобиться открывать текстовый файл больше гига? Если я хочу там чтото найти или заменить, то буду использовать подходящий инструмент(grep, sed, awk и тд) с сохранением результатов в файл. Если мне нужно следить за лог файлом, то буду использовать tail. И на крайний случай, если действительно нужно сделать сложные правки в большом файле, руками я это делать не буду точно, даже если есть такая возможность, лучше написать скрипт на питоне, который будет читать файл потоком и вносить изменения. И если предположить совсем не вероятное, что без правок руками вообще не обойтись, то можно просто разделить файл командой split и работать в любимом редакторе с частями, после чего так же просто соединить их в один, это дополнительно две команды.

Зачем редактору текста возможность читать монструозные файлы, есть другие инструменты, редактор не про это. Поправьте меня если я не прав…
Вот что пишет автор ne, у которого ноги растут еще из Amiga, о причинах портирования и дальнейшего развития редактора
«If you have the resources and the patience to use emacs or the right mental twist to use vi then probably ne is not for you. However, if you need an editor that (очень много вкусностей)» то обратите внимение на ne…
:-)
1) Друзья, как в вас влезает столько инфы? 10 синтаксисов ЯП, баш, make, консоль (туча команд), кеймапы 1-2 IDE, Фотошопа, браузера, а на закуску — Вим или Емакс. Мой список вполовину короче, но в последнее время лишний раз лезу в меню/маны/гугл, потому что на память путаю клавиши и слова.

2) Вим действительно актуален для кого-либо кроме веб-девелоперов и верстальщиков? Какая разница, с какой скоростью напечатать 20 строчек в день?
Какая разница, с какой скоростью напечатать 20 строчек в день?
Этот аргумент ещё любят приводить люди, набирающие двумя пальцами, мол зачем вам слепой десятипальцевый метод, если вы пишете по 20 строчек в день. Так вот, слепой десятипальцевый метод нужен для того, чтобы мысль не тормозилась скоростью набора. Чтобы набор текста не отвлекал от идеи. Точно так же и с редактированием. Мне, например, просто очень неприятно осознавать, что я делаю что-то слишком уж неэффективно. Что я трачу 5*N времени на то, на что мог бы потратить N. И абсолютные числа не имеют значения, значение имеет то, что быстро набирать вслепую банально приятно и удобно, и время, потраченное на обучение слепому набору, окупается с лихвой. Это как кататься на велосипеде, не пользуясь дополнительными колёсиками сзади, в конце концов, если вы проезжаете по 1 км в день, это можно делать и с колёсиками или даже на трёхколёсном велосипеде.

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

Человеку, который пишет всего (не только кода) по 20 строчек в день, 10-пальцевый метод действительно ни к чему. Я например им и не владею. Ну это так, к слову.

Аналогия неверная. Набирать вслепую действительно удобно и приятно, а редактировать в Vim — нет, потому что 1) это не IDE (нет инспекций и нетривиальных рефакторингов) 2) см. риторический вопрос про «инфу». Если IDE — самокат, то Vim — отнюдь не велосипед, а болид Формулы-1. Которым надо уметь управлять и ветерок летний не дует.
Это же всё субъективно. Кому-то приятно набирать вслепую, кто-то не видит разницы между двухпальцевым набором и десятипальцевым. Кому-то приятно редактировать в Vim, кому-то обязательно нужно всеми правдами и неправдами сделать из этого текстового редактора IDE и потом обвинять это IDE в неполноценности. Это кстати ответ и на комментарий develop7 ниже.
UFO just landed and posted this here
Можно поставить вопрос по-другому: никто не хочет тратить время на разработку того, что в общем то и не нужно :) Думаете, никто бы не озадачился разработкой нужных плагинов, если бы был большой спрос?
UFO just landed and posted this here
Вы абсолютно правы ))
UFO just landed and posted this here
Только вот это ничуть не умаляет возомжностей редактирования текста, ради которых все на виме и сидят )
UFO just landed and posted this here
Наверное потому что вим это консолный редактор, и все гуишное ему чуждо, ну кроме табов :) Или возможно почитатели вима по совместительству являются почитателями unix-way, который гласит:

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


Вим на самом деле редактор и с редактирование текста справляется отлично. Так же он отлично взаимодействует с другими консольными программами. Для меня Вим + Консоль это мощный инструмент разработки, ну и плюс браузер конечно, больше ничего не нужно.
Аналогично, кроме браузера и консоли не пользуюсь ничем. Я уже в другом топике упоминал фразу, что линукс — одна большая среда разработки :)
UFO just landed and posted this here
Ответил в том коммене, устроит такой ответ?
UFO just landed and posted this here
Так.

С навигацией в виме все хорошо, есть дерево каталогов, но им пользуюсь редко, только если нужно открыть конкретный файл, в основном пользуюсь переходом по к классам и методам(ctags).

Go to definition просто gd, иногда глючит, но я пользуюсь переходом к методу или подсветкой названия переменной.

Find usages просто grep.

Show source это гуишная штука, я обычно предпочитаю переход(ctags).

Переименовывания тегов, в плагинах есть функция переименовать парный тег.

Переименовать element class сразу во всём проекте, можно использовать поиск и замену.
UFO just landed and posted this here
По исходникам хожу просто <C-]> перейти в метод или класс, <C-t> вернуться обратно, базовая операция.

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

При поиске и замене в случае классов в css, html, js нужно будет сделать две простые замены, с элементарными регэкспами, если делаешь это часто можно написать скрипт или команду в вим.

Вообще про IDE уже писали в этом посте, что например PyCharme из-за всех его наворотов на больших проектах начинает тормозить. Я вот сейчас поставил анализаторы кода в вим, изначально сделал чтобы он после сохранения запускал их, при этом была секундная задержка, вроде мелочь, но для меня просто огромный delay, в итоге сделал отдельный контрол для запуска анализатора + асинхронный вызов для отображения количества количества ошибок после сохранения.
UFO just landed and posted this here
Вы преувеличиваете. Даже если это огромный проект с одинаковыми названиями, программист (настоящий) всегда хоть примерно знает, что он хочет найти, и где это лежит.

Если это чужой проект, то уж будьте любезны сначала разобраться в его структуре перед работой с ним.
Вы высасываете из пальца проблемы, которые нормальный консольный линуксоид даже не замечает. Вы не верите в силу грепа!? Еретик! ;)
UFO just landed and posted this here
Возможно, но я никогда не заморачивался по этому поводу. Дописываешь еще одну-две буквы к слову и вариантов остается не так уж и много. Развивайте скорость печати, друг мой, и не будет у Вас проблем автодополнением ))

А если Вы скажете в очередной раз, что автодополнение используется для изучения новой библиотеки, то я еще раз повторюсь: изучите библиотеку сами до её использования.
UFO just landed and posted this here
Вы такой забавный :) Во всех моих словах видите только то, что Вам нужно :)

Давайте тогда Вас потроллим Вашими же способами. Зайдите на vimgolf.com и повыполняйте задания оттуда в своей любимой IDE (конечно же, Вы этого делать не будете, а просто скажете, что мышкой и сочетаниями «ctrl+стрелочки» вы выполняете их за пять секунд, и вим тут не нужен).
UFO just landed and posted this here
Интересно, есть ли хоть один человек, который знает стандартную библиотеку PHP наизусть… Хотя бы функции работы со строками и массивами… Так, к слову :)
И еще… дабы не писать одно и то же в каждой ветке про вим, вот мой коммент из другого топика про автодополнение и прочие «полезные» фишки IDE.

habrahabr.ru/post/140164/#comment_4688231
UFO just landed and posted this here
в vim есть clang-complete. лучше не бывает.
20 строчек комитится, а пишется гораздо больше. Иногда ради двух строчек надо сначала 200 написать :)
Я не буду участвовать в холиваре про сложность Vim.
Я не буду участвовать в холиваре про сложность Vim.
Я не буду участвовать в холиваре про сложность Vim.
Познакомился с vi/vim еще в далеком 96ом когда сидел по telnet на забугорном сервере через модем 2400. Плевался много но потом понял что с таким лагом это реально единственное средство. За годы глаз стал уже намётанным и позволяет сходу вычислять кол-во строк, слов, символов, для перехода, замены, удаления. Сейчас если надо отредактировать текстовый файл в Win то вместо notepad всегда открываю vim.
Также существуют тысячи причин, почему вы должны использовать Vim. У меня к вам один единственный вопрос — почему вы до сих пор этого не делаете?

Я не использую Vim из-за большой зависимости от Visual Studio + Visual Assist X и еще из-за лени.

Больше всего в моей работе с Visual Studio меня напрягает навигация по тексту при помощи мышки, ее невозможно довести до автоматизма. Это особенно заметно в контрасте со слепым набором.

В последнее время я занялся изучением Emacs. Я надеялся использовать схему Emacs в Visual Studio, но к сожалению она оказалась кривой (например нажатие клавиши Alt переводит фокус на главное меню). В общем до использования в рабочее время дело пока что не дошло, т.к. сильно отвлекает от работы.

В дальнейшем планирую попробовать Vim, но только как дополнение к Visual Studio, т.к. не вижу смысла отказываться от ее плюшек, по крайней мере пока.

Может кто даст совет как улучшить навигацию по тексту в Visual Studio другими способами, не прибегая к использованию столь кардинальных подходов как Emacs или Vim?
Никак :) давно, когда писал под винду, озадачивался этой проблемой, в итоге сначала использовал вим рядом со студией, а потом плюнул на это гиблое дело (ибо вим под виндой бесит неимоверно) и редактировал все файлы в линуксе, а винда была на виртуалке для компиляци. И для «трололо»: скорость работы от переключения в виртуалку, чтобы скомпилить (пусть даже каждые десять минут) не падала, т.к. за эти десять минут я с удовольствием и в достаточно большом темпе успевал сделать то, на что в студии убил бы все двадцать.

А еще приходилось делать макросами такое, что в студии возможно только переписыванием файла с нуля (редактировал огромнейший файл проекта с переназначением id контроллов, да здравствует mfc))
После установки Vim на Win 7 x64 Prof, хоткей Ctrl-Shift-C стал запускать Vim. Где это настраивается/отключается — найти не смог и гуглежом тоже.

Ctrl-Shift-C — часто используется в фотошопе для копирования с объединением слоев, в случае установки Vim — этот хоткей невозможно использовать.
в винде вим — страшное дело :)
Не правда, кстати. В винде вим отлично работает, главное ему сразу же после установки выключить :behave msvin и не сорсить в конфиге mswin.vim, в общем отключить Windows-specific примочки.
Возможно, Вы правы, и на мне просто сказывается непереносимость винды ))
Вы Vim качали с www.vim.org или по ссылке из статьи? Потому что за инсталлятором с офсайта я ни разу такого не замечал, чтобы он шорткаты на вызов Vim куда-то прописывал.

Попробуйте в старт меню найти ярлык, который запускает Vim и в свойствах у него проверить Shortcut Key на закладке Shortcut. Если у вас ещё есть ярлык на рабочем столе или в быстром запуске — проверьте Shortcut Key и у них тоже.
мои пять копеек: так как у меня все начиналось с мсдос, то сначала я думал что mcedit это и есть то что мне нужно. Вместе с gentoo пришел nano со всей своей простотой и удобством. Он сопровождает меня и по сей день. А если править много и с логикой, то на помощь всегда приходят sed+awk. В таком режиме я редактирую и правлю все последние лет 6, а на vim смотрю как на славную добрую пирамиду Хеопса; тешу себя что вернусь к нему чуть позже.
Смотрите, чтобы не стало слишком поздно )))
Спасибо за статью.
Подскажите — есть-ли сочетание клавиш для перехода в коммандный режим, кроме ESC, а то тянуться далеко :)

Articles