Pull to refresh

Comments 199

mcedit для консоли нормальный редактор. nano тоже ничего (на случай если нет mcedit), а зачем vim и подобные я понять не могу. Зато понятно как они появились: скорее всего это были некие первые эксперименты с текстовыми редакторами, когда никаких устоявшихся норм и концепций пользовательского интерфейса в принципе не было; писали их программисты под свои какие-то очень узкоспецифические нужды и задачи. Надо автоматизировать какое-то действие — опа, есть свободная клавиша — быстро вносим в код самого редактора новый функционал, компилируем — работает! Мне это знакомо потому что я имел дело с софтом, написанным «самобытно» для специальных нужд, иногда еще советскими программистами. Все именно так: серьезная навороченная софтина, но совершенно нестандартный интерфейс. Почему? А потому что в этой конкретной узкоспециализированной сфере вот так сложилось исторически, и переделывать никто не будет — и заказчики привыкли, и программисты.
Весь функционал вима направлен на то, чтобы пользоваться им без использования мыши. Отсюда многообразие команд. А из многообразия следует их изощренность, которая таковая лишь на первый взгляд.
Если поверх прикрутить пользовательский интерфейс, функционал потеряет смысл.
nano тоже работает без мыши. Я помню даже досовская среда разработки Turbo C/Pascal позволяла вполне комфортно работать без мыши. Просто вместо вменяемого TUI (Text User Interface) в vim применяется какая-то шаманская клавиатурная магия, возникшая стихийно на заре программирования, когда самого понятия «UI» еще толком не было.
Так никто и не спорит, что nano без мыши работает. Но есть целый ворох того, что нужно помимо самого редактора для полноценной работы. Линтеры, подсветка синтаксиса, быстрая навигация по тексту, дерево папок проекта и прочее. Мне нравится, что вместе с вимом я имею весь комплект. Да, он появился не сразу, а сформировался постепенно за годы работы, но в этом и прелесть своего конфига — его можно загрузить куда угодно и удаленная машина за минуту имеет ту же среду, что и локальная.
Практически вся «шаманская клавиатурная магия» укладывается в паттерн «сколько раз сделать — что сделать — с чем сделать». Честно, не представляю как UI может решить проблему огромного числа комбинаций, которые требуются по мере написания кода. И тем более, как он может быть полезен при необходимости работать удаленно.
Линтеры, подсветка синтаксиса, быстрая навигация по тексту, дерево папок проекта и прочее.

Где этого нынче нет? Кроме того, в IDE это сильно лучше, чем в виме. Вы в своём комментарии почему-то ни разу не упомянули модальный интерфейс. А это как раз киллер фича вима.

Потому что я использую tmux и мне не нужен модальный интерфейс вима.
Где этого нынче нет?

В nano. О нем речь в комментарии надо мной.

Кроме того, в IDE это сильно лучше, чем в виме

Лучше чем?
Потому что я использую tmux и мне не нужен модальный интерфейс вима.

Создаётся впечатление, что tmux заменяет вам модальный интерфейс вима. Наверное вы хотели сказать, что вы используете tmux и отдельно, что вам не нужен модальный интерфейс вима, да?


Про tmux вы, наверное сказали к тому, что IDE в консоль почему-то не завезли? Тут поспорить сложно и вим, конечно, выручает.


Но вот по поводу того, что вам не нужен модальный интерфейс возникает вопрос. Как вы вообще используете vim? Постоянно в Insert mode? Но, судя по предыдущему комментарию у вас за плечами годы работы, неужели все они прошли в режиме вставки? Напишите, пожалуйста, подробнее, как вы работаете в виме.


В nano. О нем речь в комментарии надо мной.

Действительно. Тут тоже не поспоришь, конечно :).


Чем подсветка синтаксиса и всё такое в IDE лучше, чем в виме?

Во-первых там банально больше разработчиков трудится, во-вторых акцент именно на работу с кодом, сборку и всё такое. Дальше, конечно, надо индивидуально сравнивать с каждой IDE. Например, сравнить возвможности по рефакторингу в виме с плагинами и в Intellij IDEA.

Вы совершенно правы, а я неверно понял на счет модальности. Разумеется, если работать в одном insert, то непонятно, зачем вим нужен вообще.
Tmux для сплита экрана и для отдельных табов. В сплите можно открыть вим, может оставить консоль. Вообще, прелесть tmux — это возможность на удаленном сервере оставить сессию и подключиться к ней с другой машины, сохранив при этом всю структуру открытых окон.
А сравнение с ide всегда выходит однобоким, потому что говорящий либо работает только в ide и никогда не пробовал настроить среду vim под себя, либо, наоборот, всю жизнь просидел на виме/нано/емакс/тп, соответственно, не может рассуждать об ide.
Когда пробовал vue.js, возникла необходимость syntax highligh для .vue файлов. На канале slack пользователи разных ide регулярно на эту тему вайнили, потому что поддержки со стороны ide не было, приходилось ставить подсветку аналогичную .html, что было слегка не то. В то же время, плагин для вима был доступен с самого начала. Выглядит, наверное, как пример, высосанный из пальца, но ничего лучше у меня нет по причине отсутствия опыта работы в ide.
В то же время, плагин для вима был доступен с самого начала. Выглядит, наверное, как пример, высосанный из пальца

Пример замечательный. Всякие новые штуки быстрее появляются в виме и емаксе. В IDE почему-то позже.

Всё перечисленное безусловно полезно, но не в этом заключается соль вима. В первую очередь vim — это слепой десятипальцевый метод редактирования текста. Чтобы не повторяться, вот ссылка на мой развёрнутый коммент ниже.
Хорошее видео про vim от Кирилла из Hexlet

А если вы работаете с кириллицей, вычтите 2 пальца на регулярное, через слово, переключение раскладки, которое превратит работу с vim в ад.
А если вы работаете с кириллицей, вычтите 2 пальца на регулярное, через слово, переключение раскладки, которое превратит работу с vim в ад.

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

А как иначе вводить команды?

Когда вы говорите "вводить команды", вы имеете в виду — работать в Normal Mode? Если так, то говоришь виму, чтобы ввод текста осуществлялся в кириллице, а в Normal Mode клавиши воспринимались как английские.

А как это «сказать vim`у»? Если прописывать в конфиге, как я писал в статье, то почему-то теряется отображение вводимых после двоеточия: команд.

Вот это написать в vimrc


set keymap=russian-jcukenwin

Теперь, когда язык ОС — английский, можно в Insert Mode нажать Control+^ и язык ввода станет русским. Ещё раз — Control+^ и язык ввода английский. На язык ввода в ОС это не влияет.

Я вместо этого просто создал себе дополнение translit3: встроенный режим полон проблем вроде не работающих при определённых условиях сочетаний клавиш, некоторые из них даже иногда исправляют. И это в дополнение к необходимости уметь печатать вслепую на двух раскладках, а также недоступности ряда ASCII символов из‐за разницы в количестве букв. (Конечно, использование данного дополнения из‐за «отсутствия необходимости уметь печатать вслепую на двух раскладках» означает, что вам придётся либо печатать весь русский текст в Vim, либо печатать его не вслепую, но меня это не особо смущает.)

Я не совсем понял. Дополнение ставит раскладку в виме наподобие фонетической? Или делает ещё что-то?

Скорее метод ввода, чем раскладка. Например, первое предложение в этом сообщении я писал как «Bolxshe metod vvoda, chem raskladka.» (потом переправил «Больше» на «Скорее»): как видите, ряд букв требует более одного символа для ввода. Если вы знакомы с vim-latex-suite и/или дополнением IMAP (первое использует второе), а также с Web‐сайтами, в которых можно вводить транслитом, то тут по реализации нечто среднее.


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

1) А на что навешана эта комбинация по дефолту?
Ctrl+6 или Ctrl+^ навешан на что-то пишущее что «соседний файл не существует».
Если выполнить :tab ball то появляются закладки, и комбинация в текущей вкладке открывает зачем-то другую. И как-то глючно, логики я не понял, переключаюсь обычно по gt

2) Мне кажется неудобным запоминать ещё одну раскладку и ещё один переключатель внутри vim. Зачем столько лишних сущностей? Я пользуюсь системной переключалкой, у меня это CapsLock, и другими не хотел бы. И что это изменит? Две кнопки вместо одной жать для переключения? Вы не написали, что это избавит от необходимости смены языка на английский перед вводом команд.
  1. Переключение в режиме редактирования, не в нормальном режиме.
  2. langmap это что‐то вроде «по нажатию <C-^> создать привязки «a на ф, b на и, …». Т.к. привязки внутри Vim, то, разумеется, он может их не использовать для ввода команд. В этом главное отличие от случая с системной раскладкой: ни про какие внешние раскладки Vim не знает, получать коды клавиш «как есть» не умеет и, соответственно, не может переключить на раскладку us при переходе в нормальный режим.
даже если он сам в командном режиме английский себе включает, а при возврате к редактированию помнит текущую раскладку, то очень не хочется помнить ещё одну раскладку, и ещё одну переключалку. Это явно лишнее.
Есть ли другие методы?

Можно взять Neovim и написать для него GUI на чём‐то вроде sdl — что‐то, что позволяет получить сканкод клавиши, а лучше «значение клавиши в раскладке по‐умолчанию». Вроде такая функциональность в основном имеется в игровых движках. Neovim упоминаю из‐за того, что в отличие от Vim, он позволяет писать UI на любом языке с поддержкой ввода‐вывода (либо unix sockets, либо stdin/stdout) и msgpack. Суть нового GUI в том, что в режимах, отличных от вставки (и смежных вроде замены) и командного Neovim будет получать клавиши на основе сканкода/из раскладки по‐умолчанию.


Насколько я знаю, такой функциональности у существующих интерфейсов нет (и точно нет у «встроенного» интерфейса, использующего терминал). Не знаю, насколько сложно такое написать.

Хотя нет, так просто оно не пройдёт. Представьте себе вариант «пользователь напечатал <Esc>foa/<Esc>ащф при наличии привязки <Esc>x». Здесь, с одной стороны, GUI нужно отправить foa, с другой стороны, смена режима должна произойти только либо после отправки f/а, либо если пользователь подождёт &timeout времени. Соответственно, по‐хорошему, GUI нужно отправлять сразу оба варианта (и <Esc>foa, и <Esc>ащф), чтобы Neovim сам решал, какие клавиши как нужно интерпретировать, с другой стороны, ни Vim, ни Neovim не имеют двойных очередей ввода для разрешения такой ситуации.


Хотя вероятность того, что патч с двойными событиями ввода примут в Neovim намного выше, чем в Vim (тем более, что у Vim весь GUI на C и в репозитории, а не сторонние приложения, общающиеся удалённо через msgpack), придётся сначала изменять именно сам Neovim на C и только потом писать GUI.

К сожалению не очень понял о чем вы пишите. О Neovim даже речи не шло, я хочу использовать простой vim. А зачем мне в консольном vim GUI не понимаю. Думаю я не один говорю по-русски, и проблему ввода в командном режиме на русской раскладке уже решили. Не понимаю, почему при первом решении из статьи:

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


пропадает отображение вводимых по двоеточию команд внизу.

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


set langmap по моему мнению какое‐то странное недорешение — такой вариант хорош, если всё, что вы пишете, вы пишете только в Vim — как вы сказали выше — это +1 режим с +1 способом переключения. Что хуже, последний раз когда я его пробовал он был слишком забагован.

А vim не может что ли получать скан коды? Тогда в чем проблема одинаково реагировать и на «d» и на «в», делов то. Это же текстовой редактор, он должен «знать», что бывают не только латинские буквы.

Как именно работает set langmap я не знаю. Иначе бы знал, почему он глючит.

Откуда? Консольный не может в принципе, интерфейс терминала такого не позволяет. GVim — не знаю, есть ли в API gtk нужные возможности. И в обоих случаях вам нужно как‐то пробиться через Брама, а он может держать чужие патчи годами в todo.txt, но при этом (относительно) оперативно создавать свои реализации новых возможностей Neovim. С Брамом вам ещё сильно «поможет» тот факт, что консольный Vim таких возможностей будет точно лишён, помню он где‐то говорил, что предпочитает по возможности не создавать разницу между консольным и GUI вариантом (впрочем, разница была, есть и будет; это только ещё один минус).

Давайте, чтобы не рассеиваться, вообще не будем касаться GVim, а то я ещё вспомню что у меня кеды, и gtk не нужен™. Мы включим в беседу сравнение qt gtk, подключатся прочие члены партии «кедерасты против гномосеков», и основная тема будет надежно погребена.

У меня ВОПРОС КО ВСЕМ: А как вы пишете в vim по-русски? Неужели каждый раз выходя в комрежим, жмете не только Ctrl+[ или Esc, а ещё сверяетесь с раскладкой, и при необходимости переключаетесь? Условимся что русским языком в тексте вы все же пользуетесь.

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

Вообще‐то везде вроде можно настроить не «переключить (toggle) раскладку по сочетанию X», а «при нажатии сочетания X использовать раскладку a, при Y — b». (Кстати, моему дополнению translit3 совершенно точно не хватает средств интеграции с чем‐то вроде powerline — «режимы» есть, индикации нет. Надо как‐нибудь исправить. И я сам пользуюсь именно «toggle» семантикой с ним.)

А, и кстати у меня i3, основной GUI Neovim на Qt, а чтобы нормально участвовать хотя бы в споре «GVim vs neovim-qt», не говоря уже про gtk vs Qt vs «настоящий программист сначала должен написать свой framework» я слишком мало знаю об их возможностях.

А как вы пишете в vim по-русски?

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

set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;`qwertyuiop[]asdfghjkl\\;'zxcvbnm\\,.~QWERTYUIOP{}ASDFGHJKL:\\"ZXCVBNM<>

nmap Ж :
" yank
nmap Н Y
nmap з p
nmap ф a
nmap щ o
nmap г u
nmap З P
А видно ли в нижнем правом углу буквы вводимых команд?

Это пишется двумя отдельными строками?

nmap Ж :
" yank

Ещё относительно «одинаково реагировать на „d“ и „в“» — ни одна из раскладок не известна, какая является текущей тоже, поэтому Vim сам ничего сделать не сможет. Но вы сами можете сделать много‐много привязок вида nmap в d|nmap В D|vmap в d|vmap В D, вроде кто‐то так и решал проблему. Но здесь свои минусы: во‐первых, некоторые клавиши есть в обеих раскладках, но в разных позициях (двоеточие, вопросительный знак, точка с запятой, …). Во‐вторых, если у вас есть привязка nnoremap \foo …, то вам нужно создавать привязку nmap \ащщ \foo, с привязками nmap f а и nmap o щ ничего не заработает. Что хуже, то же относится к gt, только достать список из таких вот gt автоматически нельзя (разве что попробовать разобрать справку), тогда как список привязок можно добыть, распарсив либо execute('nmap'), либо (только в Neovim) через nvim_get_keymap('n').

не мог пройти мимо такого невежества:
в vim применяется какая-то шаманская клавиатурная магия

это лишь кажется на первый взгляд и для людей без знания английского языка (такие ещё встречаются среди IT-специалистов?). для всех остальных большинство клавиатурных сокращений понятны и являются именно сокращениями, в отличии от менее понятных ctrl+c, ctrl+v и т.п.:
dwdelete word
gtgo to tab
cit/cibchange in tag / brackets
yyank
vvisual
ppaste
И множество других…
Знаете, бывает попадаются legacy исходники, и в них вот такие же имена переменных, функций и т.д.: 1,2,3 буквы, которые что-то там, известное одному лишь автору, обозначают. И попробуй догадайся что это. Поубивал бы за такое.
ну тут нужно соблюдать баланс читаемости и краткости, или вносить расшифровку в комментарии при объявлении переменной. и ваш пример не совсем коррелирует с шоткатами vim, где любую непонятную комманду можно изучить в справке.
Оно всё, конечно, так. Но порой система создания сокращений, сложившаяся в *nix сообществе меня убивает. Я, конечно, помню про ограничения длины строки и, как следствие, сокращения команд для того, чтобы вместить больше данных, но вот сокращения какого нибудь copy до cp мне никогда не понять на фоне команды mkdir в 5 символов, например. Ну то есть 4 символа для copy едят место почём зря, а 5 символов mkdir — нет? Сокращения уровня 2-ва и 3-ри.

Есть даже человеческие языки, в которых гласных букв нет (арабский, иврит).

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

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


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


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

mkdir до двух букв в MSDOS/Windows зато сократили, не волнуйтесь, хоть где-то справедливость торжествует.

Против cp ничего не имею против, но выписывать mkdir на её фоне и правда начинает бомбить)))
И ведь во многих системах mkdir вроде бы сокращалась до md.
Спасибо, интересно.

cit/cib — change in tag / brackets


Со вторым ясно удаляет внутри (), а что делает первый?

И почему-то не работает: c% — Вырезание выражения в скобках. (% этоShift+5)
Со вторым ясно удаляет внутри (), а что делает первый?

не удаляет, а заменяет. cit — тоже самое, только «заменить текст внутри тэга» (html или xml), очень удобно. а удалить будет соответственно dib/dit (delete in brackets / tag).

И почему-то не работает: c% — Вырезание выражения в скобках. (% этоShift+5)

% — это не внутри скобок, это до следующий / предыдущей скобки (и других парных символов) под курсором (или ближейшей к курсору). подробней про этот оператор можно прочитать в справке :help %
Вот только yank притянуто за уши, лучше запомнить просто так.
nano тоже работает без мыши.

В nano нет модальности, это всё портит. Работать без мышки в vim сильно удобнее.


Просто вместо вменяемого TUI (Text User Interface) в vim применяется какая-то шаманская клавиатурная магия, возникшая стихийно на заре программирования,

Там не шаманская клавиатурная магия, а модальный интерфейс. Вот в nano, да — шаманская клавиатурная магия.

Много разных объяснений, но что-то никто не обратил внимание на такую мысль: vim — это слепой десятипальцевый метод редактирования текста. Именно это и делает его отличным востребованным инструментом, чтобы эффективно редачить что-либо не отрывая рук от базового положения на клавиатуре. Также можно сравнить с игрой на музыкальном инструменте, примерно те же ощущения будут: когда уже выработана определённая моторика, то человек не думает о том как именно он играет на этом инструменте. Ещё важно понимать такую философию: все профи вимеры используют режим вставки текста только для того чтобы набирать/добавлять новый текст, а не редактировать существующий (исключение — разве что Backspace прямо в текущем слове).

Подытожим, имхо эти пункты важны:
• предпосылка для пользования вимом — необходимо владеть слепым десятипальцевым методом набора;
• понимание в чём собственно преимущество — редактирование вслепую не отрывая рук, при помощи моторики, своего рода «играя аккорды» (а не разные плюшки, плагины, или прочие вещи которые обычно приводятся как аргументы);
• использовать режим вставки текста только по назначению, иначе теряется весь смысл и это лишь приносит боль и страдание.
• таки да, не каждый может стать музыкантом, а некоторым это и не нравится, о вкусах не спорят.

Напоследок хорошее видео про vim от Кирилла из Hexlet

> но что-то никто не обратил внимание на такую мысль: vim — это слепой десятипальцевый метод редактирования текста.

Это важно только для тех, кому важен собственно слепой десятипальцевый. А таких, по крайней мере у нас, не очень много. И для программирования это не обязательно. Не хочу поднимать отдельный флейм, но один знакомый успешный и даже знаменитый программист набирает двумя пальцами и предпочитает mcedit :)
Правильно, об этом же и речь. Логичный вывод напрашивается сам по себе: если человеку не нужен десятипальцевый метод набора, то ему не нужен и vim. При этом он может быть кем сам пожелает и пользоваться любыми редакторами которыми захочет, но vim ему не подойдёт, это будет просто мучение. Потому что не сможет задействовать самое главное преимущество — редактирование вслепую не отрывая рук, при помощи моторики, своего рода «играя аккорды».
> Логичный вывод напрашивается сам по себе: если человеку не нужен десятипальцевый метод набора, то ему не нужен и vim.

А вот это уже ничуть не логично. Если из A следует B, то из не-A не следует не-B.

> vim ему не подойдёт, это будет просто мучение

Я набираю 4-6 пальцами, в зависимости от фазы Луны, но при этом в основном использую vim. И никаких мучений. Достаточно для контпримера?

> редактирование вслепую не отрывая рук, при помощи моторики, своего рода «играя аккорды».

Из использования «аккордов» ничуть не следует необходимость редактирования вслепую.
Спасибо, ваша точка зрения ясна. Но прошу, зрите в корень. В данном случае десятипальцевый является неотъемлемой частью философии вима, иначе человек не сможет использовать этот инструмент эффективно. Поэтому утверждение логично, надеюсь рано или поздно вы сможете осознать это. Ваш «контрпример» лишь ещё раз подчеркивает тот факт, что вы не используете главное преимущество этого редактора, микроскопом тоже можно гвозди забивать, если кому-то это нравится, пожалуйста. Видимо аналогия с «аккордами» вам не полностью понятна, также как и плюсы десятипальцевого, дальнейшее обсуждение просто бессмысленно и действительно скатывается у «флейм» вместо конструктивного разговора по теме.
> вы не используете главное преимущество этого редактора

И что с того?

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

А меня в принципе не интересует подобная «идеальная» эффективность. Это всё равно, что утверждать, что никто дома не использует молоток эффективно, потому что занимаются какой-то ерундой вместо курсов по сверхэффективному забиванию чего угодно куда угодно. Но обычно в доме таки есть молоток:)
И в _такой_ Ваш корень я «зреть» не собираюсь.

> дальнейшее обсуждение просто бессмысленно и действительно скатывается у «флейм» вместо конструктивного разговора по теме.

Верно. Но заметьте, что среди тех, кто тут хвалил vim, на Ваши неоднократные «вопияния в пустыне» что-то отклика чуть менее, чем никак. Видимо, таки мало кого реально волнует это «главное преимущество». Можете подумать на досуге :) только лучше без глобальных выводов про человечество :)
Очень толсто, месье знает толк в троллинге :)
Зачем нужен vim? Да затем, что он крайне удобен, если в нем разобраться. Я не говорю, что все срочно должны бежать и переучиваться, но везде, где Linux, то есть в сфере программистов, сисадминов и так далее, идет вечный спор между поклонниками emacs, vim и sublime (не говорю, что других нет или они не популярны, но главенствующие позиции занимают именно они), а это что-нибудь да значит. Насчет того, что vim — это последствие «неких первых экспериментов» могу сказать, что vim и сейчас активно развивается. Не так давно (вроде, сентябрь 2016 года) было глобальное обновление и вышла версия 8.0. На оффициальном репозитории vim в github более 7500 коммитов. Я уже не говорю про огромное количество плагинов, которые тоже активно пишутся и обновляются. Все это не очень похоже на самопальный проект, который чудом не загнулся на старте. Кстати, vim расшифровывается, как «Vi Improved» и его корни лежат в довольно известном редакторе vi (после появления vim он уже не так актуален, однако спрос на него есть, потому что vim идет не в любой сборке Linux, а вот на vi можно рассчитывать всегда). Говорить о vim можно много, тут проще отправить человека погуглить — раньше на Linux форумах не затухали Holy War'ы по поводу этих редакторов, так что там много чего можно почерпнуть. Скажу лишь, что vim очень хорошо настраивается. Я лично уже некоторое время предпочитаю vim любым IDE (исключение — VS в Windows из-за сказочного отладчика) и очень доволен. Всем советую попробовать.
Мнение NeoCode спорное, я его тоже не разделяю, но прочитал с интересом. А зачем столько минусов насовали автору — не понимаю.

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

Но возможно «мейнстрим» редактирования текста свернул куда-то не туда, а не vim? :) Точнее свернул-то он явно туда — порог вхождения максимально низок, но вот никак не могу согласиться с тем, что устоявшаяся концепция редактора текста эффективнее чем та, что представлена в vim'е. И уж точно не соглашусь с тем, что vim разрабатывался по принципу
опа, есть свободная клавиша — быстро вносим в код самого редактора новый функционал, компилируем — работает!
, в нем всё продумано и весьма логично (не с точки зрения того, кто привык к устоявшемуся принципу ввода текста конечно).

Я не понимаю как можно не понимать зачем существует vim :) Лично я уже не понимаю как люди в обычных редакторах эффективно выполняют такие частые задачи (особенно в программировании) как например выделение/копирование/удаление текста в кавычках или скобках (в том числе {}, [], <>). В vim это делается за миллисекунды нажатием например `di"` (удалить все внутри кавычек) или например `ya(` (копировать содержимое внутри скобок вместе с самими скобками). Или например макросы. Как люди вообще живут без vim'овских макросов? А метки? Глобальные, локальные, да еще и с возможностью использовать их в командах…
опа, есть свободная клавиша — быстро вносим в код самого редактора новый функционал, компилируем — работает!
, в нем всё продумано и весьма логично (не с точки зрения того, кто привык к устоявшемуся принципу ввода текста конечно).

Далеко не всё «продумано и весьма логично». В Vim очень много legacy (настолько, что 100 % совместимый парсер VimL создать в принципе невозможно, т.к. есть настройки влияющие на то, как дальнейший код интерпретируется и интересные вещи вроде возможности написать execute "function Test()\nexecute 'if 1'\necho 1\nendif\nendfunction") плюс Брам периодически добавляет что‐то вообще без консультации с сообществом, без нормальных тестов и с неадекватными сообщениями об ошибках. Но новые изменения идут почти полностью в VimL, тогда как «нормальный» режим практически не изменяется, со времён Vi туда добавилось не так уж много. Намного больше добавилось в режим ввода, но продумано оно лучше. А именно с нормальным режимом и режимом ввода пользователь взаимодействует больше всего.

Эх молодежь… Поработайте в mcedit на скорости в 300 бод — и поймете, зачем нужны командные редакторы вроде Edlin из MS-DOS или TECO. Ну или с данными на перфоленте или магнитной ленте. Как только операция сдвига экрана начинает занимать несколько секунд — командный режим становится очень удобным.

Vi — это наследник командного редактора ed. По сравнению с командными редакторами, двухрежимные — были большим шагов вперед.

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

Если вы сравните vi с другими командными и двухрежимными редакторами, то увидите, что как раз «нормы и концепций пользовательского интерфейса» у них общие. Ну скажем много общего с EDT из RSX-11M. Вот только эти концепции очень старые, вы с ними просто не знакомы. Например, у интерфейса навигации по эрану ноги растут от интерфейсов управления терминалами VT05 и VT52.

Даже на 9600, где перерисовка экрана занимала 2 секунды, двухрежимный EDT был удобнее WISIWYG редактор TED. Примерно до 38400 прокрутка экранов настолько медленна, что её избегают. И только со 115200 WISIWYG становится реально удобен.

:)
Да, было и такое. Приходилось поднимать сервера через консольные сервера RS-232 да еще и через мобильный телефон в до GPRS-ые времена (через CSD на скорости 9600 bit/s). В промежутках между откликами с серверной стороны успевал подумать что сделать следующим нажатием, чтобы соптимизировать работу...

GPRS в районе Сочи за пару лет до олимпиады — вечером обмен раз в 20 минут. Все таймслоты забивал голосовой трафик. Это октябрь, что там летом — страшно подумать.
Замечательный комментарий, позволяла бы «карма» [+] плюсанул. Я помню эти времена, связь через телефонную линию по терминалу с другим человеком для чата и обмена файлами, либо звонок на bbs. Сам держал такую. Нельзя было перегружать экран украшательствами, потому, что при плохой связи всё слетает в мешанину. Использовал два режима переключаемых оформлений Maximus bbs — голый tty, и соответственно ansi. Как сейчас на сайтах есть урезанный режим для чтения с мобилок, вроде того.

Сейчас при использовании ssh поверх gprs/edge не менее актуально (когда пинги достигают сотен миллисекунд, а то и целых секунд). Нужно не часто, но когда понадобилось — это просто спасение.


Ну и всякий embedded, который вполне может использовать низкоскоростной uart на 9600-19200.

а зачем vim и подобные я понять не могу

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


1. Без мыши все что угодно.
2. Гарантия не испортить текст, если вы умеете работать с vim. Важно для редактирования программ/конфигов и для медленной связи. Для администрирования серверов первым делом ставлю vim и mosh.
>> как не растерять навыки, для каких целей его постоянно использовать, этот vim?
Очень просто — после освоения vim вы перестанете пользоваться другими редакторами.

Освоил vim. Каждый раз при необходимости воспользоваться (через ssh, например) – плююсь. Обычно код пишу в Sublime Text и в сравнении с ним у vim не вижу ни одного преимущества (лично для меня), кроме консольности.

Sublime стОит >50$, а vi/vim бесплатен.

Время потраченное на заучивание и применение всевозможных комманд и шоткатов в vim обойдётся явно дороже.

Просто вы просто не освоили vim ;)

Можно включить Vintage mode и считай из vim недалеко ушел

Можно, только зачем? Лично для меня главный недостаток vim – наличие режимов и неинтуитивная схема управления. Вот если бы можно было наоборот – в vim отключить это всё – то, благодаря кастомизируемости и огромному количеству плагинов vim стал бы вполне себе альтернативой современным редакторам.

>> Каждый раз при необходимости воспользоваться – плююсь
Об этом и речь. Из под палки, при необходимости и т.д. вы будете страдать вместо того чтобы пользоваться им в своё удовольствие. А почему плюётесь? Если вам не комфортно, значит вы не освоили vim.

У меня vim — основной редактор, что очень выручает, когда сидишь на нескольких платформах.
Если вам не комфортно, значит вы не освоили vim.

Очень странная логика. Ещё мне некомфортно программировать на ходу – значит, я не освоил навык ходьбы?


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


Ещё раз – про "неудобства" – это моё личное мнение, я вполне себе признаю, что кому-то в силу привычки vim кажется удобнее других редакторов.

>> Очень странная логика
До вима я пользовался студией и другими подобными убогими редакторами/IDE. У каждого редактора (на разных платформах) свои кнопочки и кривости. Элементарное редактирование неудобно практически во всех.

>> Ещё мне некомфортно программировать на ходу – значит, я не освоил навык ходьбы?
Дерзайте:
https://www.instagram.com/p/BSiHSdBlEPH/

VS тот ещё кошмар.


Элементарное редактирование неудобно практически во всех.

В Sublime Text + macOS редактирование очень удобно (при том, что удобство – вещь индивидуальная).


Дерзайте

Да, но зачем?

Ну или потому, что не сможете выйти из вима

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


~
~                           VIM - Vi IMproved
~
~                            version 8.0.542
~                       by Bram Moolenaar et al.
~                    Modified by <cygwin@cygwin.com>
~              Vim is open source and freely distributable
~
~                     Help poor children in Uganda!
~            type  :help iccf<Enter>       for information
~
~            type  :q<Enter>               to exit
~            type  :help<Enter>  or  <F1>  for on-line help
~            type  :help version8<Enter>   for version info
~
Это всё равно поможет не всем.
Если пользователь случайно зашёл в режим редактирования, ":help" добавится в набранный им текст (про ESC ему ничего не сказали).
Если же ему повезло и он всё-таки случайно вышел обратно в командный режим, но до этого уже что-то набрал, то на ":q" получит:
E37: No write since last change (add ! to override)

(нажатие "!" здесь тоже не поможет. Разве что F1 с уточнением:
   Get out of Vim:  Use ":qa!<Enter>" (careful, all changes are lost!).

)

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

И на ctrl+c (или что там аналогичное на win) vim пишет Type :qa! and press <Enter> to abandon all changes and exit Vim. Если пользователь в режиме вставки, то на двойное ctrl+c.

Если откроется справка, какой-то утилиты, например во время apt-get upgrade, то не будет этой страницы с подсказками. Будет куча текста из файла справки утилиты.
Подозреваю, что большинство попавших в vim не открывали целенаправленно через него файл.
Ваш покорный слуга, написавший статью над комментами тоже сперва принял двоеточия за декоративный элемент оформления необязательного ко вводу. Когда методом гугления я понял, как выходить, то сперва схватился за голову и освоил nano, а затем через какое-то время родилась эта статья, и я перешёл на vim.

Т.е., vim — это Омск, только виртуальный! < /sarcasm>

UFO just landed and posted this here
Когда кроме ssh есть еще sftp или scp то да, бывает удобнее пользоваться чем-нибудь типа Notepad++.
UFO just landed and posted this here
:e! Enter или :x или :wq — Выход без сохранения
:x и :wq — выход с сохранением, причём первая сохраняет только в том случае, если были изменения.

:w!/:wq! сохранение в файле, который "защищен от записи" до кучи.

> Основой мне послужила статья на хабре: «Nano: И всё-таки его придётся выучить»

К счастью, не придется. И выкручивать пальцы в vi тоже не нужно. Потому что наконец-то появился редактор micro, и он гораздо ближе к пользователю, чем его именитые собратья.

Страшно сказать, но в нем даже работает общий системный буфер обмена даже если присоединиться к хосту по SSH, и запустить micro удаленно:

Настройка общего буфера обмена для редактора Micro, который запущен в удаленной SSH сессии

Представляете, можно пользоваться привычными в DE клавишами копирования/вставки, выделять текст с помощью Shift+стрелки, а текст, при выделении строк, даже если он длинее или шире экрана, попадет в буфер обмена. Наконец -то в 2017 году появилась такая возможность в консольном текстовом редакторе.

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

Представляете, захожу по ssh на домашний роутер (SOC со жменькой оперативки и прошивкой в 4M), набираю vi — и он работает. Набираю micro — и увы…
Мысль понятна?

Надо отказаться от всех редакторов, которые не поддерживает роутер?
UFO just landed and posted this here
Большое спасибо за наводку. С нано у меня тоже какие-то странные косяки были при редактировании, сейчас уже не помню какие, но несколько раз «портил» конфиги при редактировании из-за непредсказуемой реакции на мои действия. Приходилось выходить без сохранения и начинать заново.
Vim — это вообще неюзабельно. Фанаты, вы уж простите =)

Ну а вообще лично для меня — консольные редакторы подходят только для «подправить что-то по-быстрому на удаленном сервере». Для полноценной работы таки нужно нормальное gui. И да, компьютер без мыши — неюзабелен в принципе для меня. Даже с тачпадом (а ноутбуки я в принципе не приемлю по эргономическим соображениям).

Обидно, что любителей «дедушки» vi называют мазахистами. У vi есть одно приемущество, которое его для меня делает любимым инструментом — он есть во ВСЕХ *nix системах, с которыми приходилось работать, «из коробки». Я далеко не все его возможности знаю, но те, что запомнил 20 лет назад исполюзую регулярно. В 100% случаев в незнакой системе в любом конфигурационном файле им удается найти строку или нужный контекст и внести изменения. Я не задумываясь первой попыткой вбиваю vi и он всегда готов к работе (всегда есть в $PATH). Для многооконного редактирования с множественными undo почти всегда под рукой есть что-то более удобное.

nano тоже есть везде. Даже в базовой установке аскетичного Arch Linux. Хотя ему немного меньше 20 лет, как подсказывает Википедия.

Да, он много где есть, но не везде и не везде "из коробки"…
В медиаплеере Dune HD он действительно есть, а вот в прошивке для роутеров Asus (не стандартной) его нет.
И в dd-wrt его нужно отдельно ставить.


ASUSWRT-Merlin RT-N66U_3.0.0.4 Fri Jul 17 03:15:20 UTC 2015
admin@RT-4:/tmp/home/root# nano
-sh: nano: not found
admin@RT-4:/tmp/home/root# find / -name nano
admin@RT-4:/tmp/home/root#

Есть куча дистрибутивов, где его не окажется. Да и не Linux'ом единым, за пределами linux'а много систем, где в базе не будет nano.

Тем не менее, и тут у vi существенное преимущество: он входит в busybox.
Поэтому как бы не был nano "везде", vi будет гораздо "вездее".

Его не всегда собирают. Хотя, в этом случае часто есть elvis (совместимая реализация vi). Ну и ed + sed будут в наличии с ещё большей вероятностью. А зная vi вполне можно управиться с его "предком" ed.

Не во всех он есть из коробки. В Manjaro например не было.
То, что он есть везде, не делает его удобным. =)
Знать его, при соответствующей специфике работы, безусловно надо, хотя бы на базовом уровне. А вот любить imho не за что — времена терминалов на 2400бод, когда он был спасением, давно прошли, и концепция с ними устарела.
Дружище, за 20 лет работы можно уже изучить что-то новое. Я конечно понимаю, сила привычки, лень, да и просто неохота развиваться дальше… Поверь, для работы с проектами за 20 лет сделано много хороших IDE, и подсветка синтаксиса у того же nano присутствует, и поиск работает нормально. Vi был хорош именно 20 лет назад, сейчас это просто динозавр обросший избыточной функциональностью.
Поверь, для работы с проектами за 20 лет сделано много хороших IDE, и подсветка синтаксиса у того же nano присутствует, и поиск работает нормально.

Ну да, текст только очень неудобно редактировать, а так — всё хорошо.

Это кому как, о том и речь. Свое мнение о vim я высказал, для редактирования текста мне хватает nano.

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

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

У Столлмана выбора, может быть, и не было. Поэтому он сделал EMACS. После этого выбор точно был :)


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

Редактирование текста там везде такое, как в блокноте. Стрелочки, Control + C, Control + V, все дела.


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

Только никто не отказывается от оптимальных инструментов. Одни доводят вим до состояния, когда его можно сравнить с IDE, другие вставляют в IDE режим редактирования текста как в виме.


Он слишком сложен для текстового редактора и недостаточно гибок для больших проектов.

А что вы имеете в виду, когда говорите, что он слишком сложен для текстового редактора?

Да, видимо Ви так напряг Столлмана, что он решил написать Емакс.

Одни доводят вим до состояния, когда его можно сравнить с IDE


А зачем доводить Вим до состояния IDE? Не проще грамотно использовать само IDE?
Да, видимо Ви так напряг Столлмана, что он решил написать Емакс.

Ну да, он так и сказал. Но теперь, повторюсь, выбор есть :)


А зачем доводить Вим до состояния IDE?

Чтобы пользоваться режимами.


Не проще грамотно использовать само IDE?

Зачастую проще написать плагин к IDE, который перенесёт туда куски от вима. Люди так и делают, да.

UFO just landed and posted this here

Вот что реально неудобно в vim — копипаста.
Если он единственный редактор — одно дело. А если он открыт в консоле/собственном гуе, а рядом открыта куча других программ (десктоп), которые давно знают, что делать по нажатию Ctrl+C/Ctrl+V, vim на их фоне раздражает. Именно тем, что "не как все".
Есть окошко с текстом, есть курсор — будь добр, реагируй как другие нормальные окошки с текстом и курсором! Все другие комбинации, как правило, используются гораздо реже, но эти....

Для единообразия работы в гуе берутся таки гуевые средства (тот же gvim).
А Ctrl+C, Ctrl+V это конфликтные шорткаты — в отличие от Ctrl+Ins, Shift+Ins.
Однако во всех хороших IDE есть vim-mode либо из коробки (например Idea предлагает использовать vim mode по умолчанию при первом запуске), либо в числе популярных плагинов. Наверно это для тех, кто никак не может переучиться на «современную» концепцию редактирования текста :)
Да, это сделано для того, чтобы хоть как-то привлечь людей, ничего кроме vim не принимающих. Опять-таки, что эти моды дают, кроме знакомой комбинации команд/клавиш? Ничего. Все можно сделать и более простым (читай: НЕ vim-овским) путем.
для тех, кто никак не может переучиться на «современную» концепцию редактирования текста

Я так думаю, что если-бы копать лопатами было так удобно и производительно, экскаватор не изобрели-бы. По аналогии: если vim такой удобный, зачем придумывать более простые средства работы?
Да, это сделано для того, чтобы хоть как-то привлечь людей, ничего кроме vim не принимающих.

Это люди, которым нравится вим сделали для себя способы комфортно работать в IDE.


Опять-таки, что эти моды дают, кроме знакомой комбинации команд/клавиш? Ничего. Все можно сделать и более простым (читай: НЕ vim-овским) путем.

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


По аналогии: если vim такой удобный, зачем придумывать более простые средства работы?

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

Режимами? Правда? А а что в них такого уникального? Возможность замены с подстановкой? Или копирование? Или поиск по шаблону? Или вы используете (если используете) такие корявые IDE, что они этого не умеют?

А зачем вам клавиатура? Запустите экранную клавиатуру и вводите мышкой текст, комбинации клавиш. Или у вас такая корявая система, что экранная клавиатура этого не умеет?


Вы не поняли сути. Она не в том, что можно делать с использованием режимов. Суть в том, как вы будете это делать. Режимы удобнее тем, что для всех этих вещей, во‐первых, достаточно клавиатуры, во‐вторых, используются более удобные комбинации, чем распальцовки на две…четыре клавиши с необходимостью двигать руку до стрелочек, а то и до мышки. Хотя можно найти и некоторые уникальные вещи — ваша IDE, к примеру, умеет «выдели отсюда и до строки frobnicate(foo);»? — модальный режим интересен не ими (и, вполне возможно, что именно ваша IDE такое‐таки умеет).

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

Да, для работы в IDE мне не надо помнить здоровенный набор команд и порядок их ввода. Использование мышки здесь более интуитивно.

Кроме того, двигаться все-таки надо, хотя-бы и за мышкой, а то можно совсем здоровье на этой работе потерять. :)

И не говорите мне, что у вас нет лишнего USB порта под мышку, или ваша система настолько tiny, что все драйверы из неё вырезали, а vim оставили. Все, что написано вами выше — всего-лишь привычка, вы используете вим потому что вы ПРИВЫКЛИ его использовать, не более того.
Не думаю, что использование экранной клавиатуры для редактирования текстовых файлов такая уж плохая идея.

Пробовали печатать на экранной клавиатуре не глядя на клавиши?

Текущая проблема экранной клавиатуры — отсутствие вменяемых тактильных ощущений. Печатать 10ю пальцами вообще слабо представляется возможным.

Да, для работы в IDE мне не надо помнить здоровенный набор команд и порядок их ввода. Использование мышки здесь более интуитивно.

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


Современные IDE для эффективной работы требуют помнить некоторый набор команд (часто с emacs-like комбинациями клавиш). Начиная от банальных сохранения файла/проекта, поиска, перехода к другим функциям/методам/структурам/классам, запуска/деплоя, операций в режиме дебаггера (step over/step into/run/continue/et cetera). И заканчивая всякими операциями рефакторинга (комбинации клавиш для не очень частых можно и не помнить, но помнить название и комбинацию для запуска find action).

Режимами? Правда?

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


А а что в них такого уникального?

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


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

Повторюсь: вы используете Vim не потому что он такой хороший, а потому что вы привыкли его использовать.

Вим на самом деле неудобен, но те, кто им пользуются к нему привыкли? Режимы это тоже на самом деле неудобно, но те, кто ими пользуется, этого не замечают — без режимов им было бы легче жить? А декларируемое пользователями удобство это иллюзия? И, если пересадить пользователя вим за другой, более удобный редактор и не давать доступа к виму месяца два — он привыкнет к хорошему и обратно к виму вернуться не захочет?


Я правильно понимаю вашу точку зрения?


Если да, то помогите мне сделать её более научной :). Как можно доказать, что это не так? Что режимы в виме на самом деле удобнее?

Давайте почитаем отзывы. В большинстве своем они сводятся к следующему: «попробовал первый раз вим, потерялся/не понравился/отстой. Потом пришлось работать — привык, теперь все норм». Ничего не напоминает? Пользователям НЕ НРАВИТСЯ вим. Они вынуждены в нем работать по тем или иным причинам. А потом они ПРИВЫКАЮТ.

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

Или вы не привыкли использовать режимы в вим и для вас это каждый раз поиск правильной команды в мане?

Вот этот сценарий:


«попробовал первый раз вим, потерялся/не понравился/отстой. Потом пришлось работать — привык, теперь все норм».

и эксперимент, который вы предложили


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

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


И ещё мне немного неясно. Это вот этот эксперимент вы предлагаете для того, чтобы отличить тех, кому кажется, что им удобно от тех, кому на самом деле удобно. У тех, кто откажется от вима при первой возможности — были иллюзии, а у тех, кто не откажется — настоящие положительные ощущения от удобства?

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

Иллюзии? Это уже из разряда метафизики. Может быть, иллюзии это ощущение удобства вим? И те, кто отказался от его использования это поняли? Обсуждать это дальше не имеет смысла.

И вы не отвели на мой вопрос: вы привыкли использовать вим?

Итак. Эксперимент такой:


Заставляем пользователя какое-то время (пусть 2 месяца) пользоваться только вимом. Потом возвращаем ему любимый до этого редактор. И, если он продолжит пользоваться вимом, или включит в своём любимом редакторе модальный режим — значит ему это по настоящему удобно. Если нет, то удобство от использования режимов — это просто иллюзия. Правильно я всё понял?


Иллюзии? Это уже из разряда метафизики. Может быть, иллюзии это ощущение удобства вим?

Ну да, я так понял, что вы хотите сказать, что удобство, которе создаётся при использовании vim — это просто иллюзия. А на самом деле человек банально привык к неудобному.


К вам вопрос: у вас был любимый редактор до того, как вы стали пользоваться вим?

Ну как у всех, наверное. EmEditor был и Notepad++. Код что тогда писал в Идее, что сейчас пишу.


И вы не отвели на мой вопрос: вы привыкли использовать вим?

Привык, конечно. Не столько к виму, сколько к модальному редактированию. Очень удобно.

Сознательно перешел с Sublime на вим. Далее было несколько недель постепенного привыкания к новым командам. Именно постепенного, потому что десяток базовых, которые дали мне возможность вернуться к скорости работы в Sublime, я выучил за первые пару часов. Принудительно возвращался к Sublime дважды, когда нужно было поработать на чужом ноуте. И да, то, что я привык делать руками в виме, мышкой в визуальном редакторе делается намного дольше.
Все можно сделать и более простым (читай: НЕ vim-овским) путем.


Более простой != более эффективный. Например взять мышь, выделить текст от одной скобки до другой, затем выбрать в выпадающем меню пункт «вырезать» проще чем запомнить команду `di(`, но уж точно не эффективнее.
Дружище, за 20 лет работы можно уже изучить что-то новое.

Спасибо, кэп! Только, я не говорил, что умею только в vi… (X)emacs мне для разработки на Perl вполне хватало.
В системах без монитора, мыши и кнопок, мне не нужны другие редакторы. Я ни в коем случае не принижаю нужность удобного IDE. Просто, я давно не занимаюсь разработкой и мне не надо верстать "Войну и мир". Для администрирования *nix систем вполне хватает vi. Ставить кучу лишних пактов в систему с изначальным конфигом "kernel only" не хочется. Не все железки имеют доступ в Интернет. Таскать пакеты на "дискетках" не удобно. Делать backdor не хочется. Не для всех систем есть место куда можно что-то поставить.

Всегда пожалуйста, приходите ещё!
что умею только в vi

ну именно так оно и прозвучало.
UFO just landed and posted this here

Не нужно передергивать. Для программирования уже давно есть соответствующие среды разработки (под все системы). Помнится в далеком прошлом для программирования на Perl я использовал (x)emacs. В принципе было довольно удобно.
Обсуждаемые редакторы, IMHO используются в основном администраторами (для редактирования конфигов).

UFO just landed and posted this here
В общем получу я ещё кучу минусов и карму загоню ещё дальше.

И вполне заслуженно как минимум за:


Тут практически нет разницы, и только один диагноз Vim мозга.
UFO just landed and posted this here
Но желание тащить за собой устаревшие концепции разработки в современную IDE

Не понимаю о чем вы. Vim плагин в IDE никак не влияет на концепцию разработки — просто способ редактирования текста. С тем же упехом можно заявить, что использование Chrome для гугления позволяет писать более эффективный код чем тот, что вы погуглите с IE.

UFO just landed and posted this here

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


Далее:


  1. Vim — текстовый редактор.
  2. Текстовый редактор является неотъемлемой частью IDE

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

Я много раз сталкивался негативными последствиями работы программистов консольного Vim

а поведайте примеры, пожалуйста :) для эрудиции
UFO just landed and posted this here

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


Линтера пропустившего простую опечатку потом попавшую на продакшен сервер и конечно же потушивший его к чертовой бабушке.

А у вас все сразу в продакшн?

Я вот не вижу ничего смешного чтобы снести основную ветку git в продакшен репозитории на сервере. А потом сослаться в на ошибку в каком то плагине.
Я тоже не вижу )) но у меня тут сразу вопрос к организации процесса: как программиста, да со своими плагинами и конфигами, пустили на продакшн?

Линтера пропустившего простую опечатку потом попавшую на продакшен сервер и конечно же потушивший его к чертовой бабушке.
а как же тесты?

А потом искавший её два часа.
а как же git log?

Вечно срывающиеся сроки проекта.

и во всём этом виноват получается vim? Ооок ))

Я как‐то не вижу, что такого специфичного для Vim в «ошибке в плагине» (90% что плагин тут не причём, просто люди не любят признавать свои ошибки), линтере и срыве сроков. Настраивать (скорее, писать дополнения) можно и IDE. И вообще вы скорее описали не Vim’еров, а «неопытных разработчиков», совмещённых с неграмотными админами (где CI и запрет на force-push в основную ветку?).

Я вот не вижу ничего смешного чтобы снести основную ветку git в продакшен репозитории на сервере.

Я тоже не вижу. Странно, что такая возможность у разработчика есть.


А потом сослаться в на ошибку в каком то плагине.

Ошибка может быть и в плагине к IDE.


Линтера пропустившего простую опечатку потом попавшую на продакшен сервер и конечно же потушивший его к чертовой бабушке.

Программист допустил опечатку, юнит тестов видимо нет, CI видимо нет, банального тестирования видимо нет (иначе опечатка не потушила бы сервер, а сделала бы что-то не такое масштабное). У вас проблем гораздо больше, чем программисты, которые пишут в Vim.

UFO just landed and posted this here
Не вижу ничего негативного во фразе объясняющий образ мышления.

Вы не могли бы привести пример фразы "что-то там головного мозга" и чтобы это что-то подразумевалось не в негативном ключе? И чтобы те, кто это что-то делает подразумевались в нейтральном ключе?


Да и как я уже говорил сообщество Vim плохо переносит критику.

Ну вы попробуйте в топике, посвящённом особенностям использования Intellij IDEA написать про IDE головного мозга и посчитайте минусы :). А потом напишите, что не видите ничего негативного во фразе объясняющий образ мышления и посчитайте минусы ещё раз :).

Двачую. Необоснованное оскорбление людей — надёжный способ хабросуицида.

Вот корпишь неделю, материал там собираешь, пишешь статью про оба редактора, не противопоставляя один другому, и всё равно найдется кто-нибудь, кто напишет, что лучше бы написал, «как ими не пользоваться», и тот кто диагноз «vim головного мозга» поставит…
Скажите как повысить себе карму, хочу присоединиться к кармовойнам)

Я заметил на хабре как минимум 2 темы, которые вызывают жуткий холивар в комментах:


  • Vim
  • Unix way

Под некоторыми статьями новые комменты появляются даже месяцы спустя.

Для всех современных IDE есть vim-плагины, сюрприз-сюрприз. Например, IdeaVIM для всех JetBrains-овских IDE.


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

Если нужен не-vi-like редактор, всегда сношу nano и ставлю joe. В отличие от nano, у него управление в разы понятнее, и достаточно удобно.
Но в реальности привык использовать vim для всего, где не нужно IDE с полным набором уже специфичных плюшек вроде рефакторинга.
UFO just landed and posted this here

А для VisualStudio Есть бесплатный VsVim (и платный ViEmu, но особых преимуществ я у него не смог обнаружить). Интегрируется не идеально, но вот уже который раз после переустановки студии ставлю его, значит есть польза;)
Особенно он выручает при работе с ноутбука, когда есть только тачпад и нельзя мышкой вжух-вжух.

Где бы найти наклейки на клавиатуру с командами vi?

А зачем они? Я основные команды помню, потому, что они интуитивно запоминаются:
i — Insert
a — Append после текущего символа
SHIFT i — Insent в начало строки
SHIFT a — Append в конец строки
CTRL f — Forward (пролистывание на страницу) эти же команды можно использовать в команде man и more
CTRL b — Backward (пролистывание на страницу назад) эти же команды можно использовать в команде man и more
w — Write
q — Quit
set nu — пронумеровать строки (удобно если в логах пишут номер проблемной строки)
dw — Delete World
dd — удалить строку (не знаю что значит второе d. я, просто, это помню)
Стрелками уже давно можно перемещать курсор (раньше это делалось кнопки H J K L (вверх, влево, вниз, вправо) почти как в играх)

Команды поиска от vi (/ и ?) тоже частенько использую в man и more. Без них не знаю как бы что-то искал…
Еще непосредственно из команды more можно перейти в режим редактирования в vi (жмем v из more).

А зачем? ИМХО без навыков слепого десятипальцевого набора смысла в VI крайне мало.
UFO just landed and posted this here

Для "десятипальцевого" был Lexicon, а сейчас есть Word, Wordpad, Pages и масса других.
Смысл в vi в том, что он есть во всех (тут правда, сказали что не во всех) *nix системах и всегда можно поправить конфиг и вывести систему из "штопора". Никто не говорит, что в нем нужно верстать "Войну и мир". Правда, если бы у жены Л. Толстого (она переписывала труды) был хотя бы vi, было бы не мало пользы.

В МИФИ когда были лабораторные по Фортран код по методичкам предлагалось писать в Vi (и через ssh)… И это при том, что специальность — электроника, а те двое из моей группы (один из них я), кто реально мог писать код в консоли (имел опыт администрирования linux по ssh), приходили по большей части только на сдачу лабораторных и не желали использовать Vi, потому что знали, что это такое и также знали как его не использовать (конкретно я собрал и залил себе статический бинарник с Vim на случай, если во время сдачи нужно будет что‐то менять).

Дискуссия переходит в "холивар"… Складывается ощущение, что кто-то собирается блокировать vi, vim, nano и др., как это собираются делать с VPN и менеджерами. Вопрос не в том, кто что предпочитает, а в том, что тут мы пока вольны использовать то, что больше нравится. У каждого из редакторов есть плюсы и минусы, причем у каждого свой набор и того и другого.

Я тут где‐то предлагал что‐то блокировать? Я вообще‐то сам Vim использую. Мне просто не понравилась та ситуация, а здесь я показал, что у кого‐то может быть и такой первый опыт с Vi (точнее, там была обычная «крошечная (tiny)» сборка Vim). Не думаю, что он кому‐то понравился: tiny Vim даже не все пользователи Vim переваривают, тем более с настройками по‐умолчанию (т.е. в режиме совместимости), а уж те, кто с модальными редакторами не работал, и подавно.

В мои студенческие годы, когда я подрабатывал на кафедре Информатики, студенты на дискетах тоже притаскивали свои редакторы (включая lex.exe) и мамой клялись, что без них не могут редактировать в qbasic (quickbasic). Приходилось делать внушение и показывать, что при сохранении файлов в них частенько оказывалась куча дополнительного мусора, который был понятен только этому редактору. Спасало только то, что сеть была на бездисквых станциях, а на сервер можно было писать только в один раздел из которого нещадно выметались все программы. Так мы во времена aidstest боролись с вирусами...

Доктор, я тащусь от edlin.exe, скажите, это лечится?
!!!
Тем, кто не помнит хотя бы радость перехода от 5-дюймовых дискет на 3-дюймовые, трудно будет понять юмор во фразе: «Windows: От людей подаривших вам EDLIN!»
5.25" у меня сохранилось стопка длиной см 50, и почти все (ZX-Spectrum диски 320Kb, IBM диски 1.2Mb) рабочие. А 3.5" ранние эпохи бума ещё ничего, а в последние 90е годы такое гвно стали выпускать, что все размагнитились, поэтому радости перехода предпочел сразу флешки.
Да, TR-DOS forever) Из-за бага/фичи команды чтения сектора я смог тогда сотворить программу для Спекки ( у меня был «Байт» — брестский клон 48-го), читавшую файлы PC-шных 720-кбайтовых дискет. А моя первая 64-Мбайтная флешка до сих пор в строю!
Ну не такой уж forever этот TRDOS) Для игр — да, а для работы (код, тексты) предпочитал iS-DOS. Там такой мощный хоткейный редактор, что после него никакие nano-vim не страшны. Просто deja vu, что вернулся туда) И подобие командного режима как дополнительного аппендикса в isdos editor было. Вот если бы как в vim реализовали, а не через тернии, то гораздо удобнее было бы — сейчас уже понимаю.

Сейчас у меня в строю и используется zx-evo.

Мой «Байт» погиб в неравной борьбе с перепутанной в спешке полярностью питания. Дискету с IS-DOS я заполучил незадолго до этого, поэтому поработать с ней толком не успел :-(
Кто-нибудь юзает хабрахоткеи?
p.s. Хабр любит vim
UFO just landed and posted this here
Вы ради любопытства просто полазьте по гитхабу, то что там есть ни одной IDE не снилось.

Как там с плагинами для рефакторинга? Ну банальные extract function/method, например?


Disclaimer: пользуюсь и vim и IDE от JetBrains с плагином IdeaVim.

Два в одном: как пользоваться Vim и Nano?

Напишите пожалуйста статью "Как не пользоваться Vim и Nano"

А зачем кому-то читать про то, чем он не хочет пользоваться?

Затем, что ему приходится этим пользоваться, но хотелось бы от этого уйти. Есть какие-то более привычные альтернативы консольных текстовых редакторов под linux?

Если не нравится vim, nano, то чем не угодил mcedit? там и помнить ничего не надо, есть меню.
А знать все консольные редакторы невозможно, тогда не останется времени научиться толком уметь работать хотя бы в одном из них. Поэтому я даже emacs осваивать не буду, зачем, когда трех и так с избытком на все случаи жизни хватает.

После входа в vi:

1)Для начала редактирования нажимаем «i»
2)После завершения всех изменений нажимаем ESC
3)Теперь для выхода с сохранением вводим ":qw" и Enter
4)Если не хотим сохраняться — ":q" и Enter

Всё. Вся боль людей.
UFO just landed and posted this here
да, нюанс:

1) Если вы что-то уже изменили, то выход без сохранения надо выполнить так — «q!» (!- это типа force)
2) Я опечатался в команде сохранения изменений — надо ":wq"
Опять перечислили команды, а как ими пользоваться не объяснили.

Опишите, какими командами пользуетесь чаще всего и порядок действий. Неужели удобно каждый раз переключаться между командным и модальным режимами?
Если в Notepad++ можно зажать Shift и стрелками выделить текст, затем его можно легко скопировать, вставить, сдвинуть (Tab/Shift+Tab) или нажав Ctrl+H произвести замену в выделенном блоке используя те же регулярные выражения, то в vim я не понимаю, как можно так же легко это сделать. Каждый раз надо переключаться между режимами, запоминать номера строк, между которыми надо произвести замену (:12,27s//g), а если мне надо произвести замену не в целой строке, в середине заменить часть точек на запятые.

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

Вместо номеров строк нужно просто использовать выделение (которое визуальный (visual) режим). Выделяете, пишете :s, в командной строке напишется :'<,'>s. В визуальном режиме доступны все команды для перемещения курсора, в т.ч. вверх/вниз и /regexp. Вызывается визуальный режим клавишей v посимвольно, с модификаторами Shift (построчно) или Ctrl (блочное выделение) (во всех случаях :s сработает одинаково, диапазон строк является диапазоном строк).


Вот в середине что‐то заменить не так просто, можно только пользоваться \%V в регулярном выражении.


(Кстати, здесь есть ещё одно непонятное legacy: режим выделения (select mode). Имитирует выделение из более популярных редакторов — не принимает команды, выделенный текст при печати чего‐нибудь без Ctrl будет заменён. Не знаю ни одного человека, который бы его использовал, кроме того, почти все дополнения используют vnoremap или даже noremap, что определит сочетания клавиш для режимов выделения и визуального одновременно, разрушая утверждения «не принимает команды, выделенный текст при печати чего‐нибудь без Ctrl будет заменён».)

diw — удалить слово
ciw — удалить слово

И там, и там «удалить»? Лучше так:
diw — (delete inner word) удалить слово под курсором
ciw — (change inner word) заменить слово под курсором (удалить и перейти в режим редактирования)

Пытаюсь понять зачем нужен vim когда есть такие редакторы как sublime и phpstorm...


Я понимаю если нужно что-то поправить на сервере где нет редакторов, это да. Но на домашнем легче же написать sudo subl file.txt и все.
Кто-то писал что в vim легко убирать текст из кавычек. Серьезно? Хорошо, раз в год когда палка стреляет бывает нужно поправить, но логику все равно не понять.

Как-то так получается, что по прошествии стадии мук обучения работа в vim становится как это говорят second nature и «vim file.txt» оказывается гораздо проще, быстрее и эффективнее чем «subl file.txt» (если конечно в нем нет vim mode, но даже так мне кажется что vim в текстовом режиме запустится быстрее) :) Удаление текста между кавычек (а также скобок, внутри html тэгов, между метками...) это далеко не единственная задача, которую эффективнее делать с помощью vim, чем с помощью «традиционного» редактора текста. Конечно при условии владения техникой.

Вот собственно и вся логика. Не понимаю что здесь непонятного :) Еще до того как я освоил vim мне была понятна мотивация тех, кто им пользуется. Также как мне вполне понятно зачем люди пользуются emacs, unix-like ОС, терминалом или предпочитают МКПП в автомобиле. Подобные инструменты действительно позволяют работать эффективнее, а иногда просто приносят больше удовольствия при их использовании, что тоже немаловажно :)
Помимо всего прочего vim приучает к культуре самостоятельной автоматизации рабочих процессов и углубленнной Настройки повседневного инструмента. Есть много людей, профессий и задач. Так вот под каждую рутинную задачу, связанную с обработкой текста, vim можно задрочить настроить для эффективного Ее выполнения.

Представьте, вам нужноразово нагенерить 1000 однотипных конфигурационных файлов с различающимися 5 строками. Vim (а он в том числе научит пользоваться sed/awk) вы настроите под эту задачу.

Мнение о том, что за 20 лет придумали множество более удобных инструментов, разбивается о факт, что и vim 20 лет не стоял на месте. Это как сравнивать ms word и latex для тех, кто профессионально работает с версткой книг. Или excel и scilab для матстатистики. Вы профессионально много работаете с текстом? Тогда вам надо разобраться с vim, это не так больно) Нет — для вас есть более узскоспециализированные инструменты. Нужно всего лишь им пользоваться, а при возникновении проблем гуглить решение и вникать в латинские буковки.

Чтобы пользоваться vim нужно желание совершенствовать свой повседневный инструмент. Крайне желателен навык слепой печати. И вообще необходимо желание использовать аскетичную линуховую консоль и понимание Ее преимуществ, принятие этой философии) Ведь там, где этот редактор, обычно ставится screen/tmux, активно используются sed/ask и разные башизмы.

P.S. Кстати, может кто подскажет, есть в ms word настройка редактирования в режиме vim?
Ctrl+a — Увеличить число под курсором на единицу
Ctrl+x — Уменьшить число под курсором на единицу

не только под курсором, но и после него или в каждой строке выделенного текста, что гораздо-гораздо лучше ;)
Спасибо, исправлю. Только вернее «ближайшего справа числа». Проверил на коде:
if uboat.engines['electro4']['rpm'] != 0 or uboat.engines['electro6']['rpm'] != 8:
Sign up to leave a comment.

Articles