Про vi(m)
От: Mamut Швеция http://dmitriid.com
Дата: 25.02.10 09:23
Оценка: 4 (4) +2 :))
Основной посыл про vi(m) выглядит так:

Vim умеет всё, что умеет редактор Студии и вообще традиционные редакторы. А вот обратное неверно.


или даже так:

vim умеет столько всего, что студии(эклипсу, ноутпаду) и не снилось



После чего возникает резонный вопрос — а что именно им не снилось и что именно уметт vi(m) такого, что другие не умеют?

И тут вдруг появляется засада. Их всех приведенных примеров все упирается в то, что иногда vi(m) позволяет нажать чуть меньше клавиш, чем другие редакторы. А все остальное — поиск, jumplists, регэкспы и т.п., оказывается, существуют и в других редакторах. Иногда — да, где-то не там и не так, как хотелось бы. Но с другой стороны vi(m) не позволит сделать вот такой
Автор: Пацак
Дата: 24.02.10
рефакторинг.

Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом? Только убедительная просьба. Если будете считать количество клавиш, то разница должна быть на порядок хотя бы, а не на одно-два нажатия


dmitriid.comGitHubLinkedIn
Re: Про vi(m)
От: fddima  
Дата: 25.02.10 09:36
Оценка:
Здравствуйте, Mamut, Вы писали:

Эх, ну что же ты, на серьезный вброс на вентилятор как-то вроде и не тянет.
Re: Про vi(m)
От: frogkiller Россия  
Дата: 25.02.10 09:42
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом?


Ну как бы классическое: выделить текст и пропустить через произвольный набор внешних фильтров
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[2]: Про vi(m)
От: Mamut Швеция http://dmitriid.com
Дата: 25.02.10 09:46
Оценка:
M>>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом?
F>Ну как бы классическое: выделить текст и пропустить через произвольный набор внешних фильтров

Ч0рт. Надо было еще попросиь приводить примеры и юзкейс.

Что такое произвольный набор внешних фильтров, что такое внешние фильтры, и зачем это нужно?


dmitriid.comGitHubLinkedIn
Re: Про vi(m)
От: frogkiller Россия  
Дата: 25.02.10 09:51
Оценка: 2 (1) +1
Здравствуйте, Mamut, Вы писали:

M>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом?


При (почти) всей этой функциональности vim прекрасно работает в консоли через кучу терминалов и с вероятностью 95% "из коробки" живёт в разных мелких девайсов типа домашних роутеров, не говоря уже о больших серверах.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[2]: Про vi(m)
От: Mamut Швеция http://dmitriid.com
Дата: 25.02.10 09:52
Оценка:
M>>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом?

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


Принимается. Это — действительно так


dmitriid.comGitHubLinkedIn
Re: Про vi(m)
От: andrey.desman  
Дата: 25.02.10 09:54
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом? Только убедительная просьба. Если будете считать количество клавиш, то разница должна быть на порядок хотя бы, а не на одно-два нажатия


Например так:
http://www.youtube.com/watch?v=gsMjQP4yxYw
http://vimeo.com/3535418
Re[2]: Про vi(m)
От: Codechanger Россия  
Дата: 25.02.10 10:44
Оценка:
Еще такой вопрос. Тут в соседнем топике всплывал вопрос про безальтернативность сами знаете какой IDE. Так вот, а в Линуксе-то есть альтернатива vim, сопоставимая с ним по возможностям. Потому как альтернатива той самой IDE есть(в виде того же vim под Windows).
Re: Про vi(m)
От: DOOM Россия  
Дата: 25.02.10 10:53
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом? Только убедительная просьба. Если будете считать количество клавиш, то разница должна быть на порядок хотя бы, а не на одно-два нажатия


В студии нельзя параллельно набирать статью в TeX'е, писать программу на С и скрипт на баше.
А еще, помню по времена 2003-й студии народ писался кипятком от ее фолдинга (совершенно неуправляемого, насколько я помню). В vim'е как бе всегда было...

И в vim'е очень удобно грепнуть по 10-ку файлов, а потом cp, cn и т.п. прыгать по результатам поиска (помнится в студии тоже через гуй был какой-то поиск по содержимому файлов, но не такой прикольный).

ну и т.д. и т.п. много фишечек...
Re[2]: Про vi(m)
От: IID Россия  
Дата: 25.02.10 11:11
Оценка:
Здравствуйте, DOOM, Вы писали:

DOO>И в vim'е очень удобно грепнуть по 10-ку файлов, а потом cp, cn и т.п. прыгать по результатам поиска (помнится в студии тоже через гуй был какой-то поиск по содержимому файлов, но не такой прикольный).


в студии CTRL+SHIFT+F. А что значит выделенное ?
kalsarikännit
Re[3]: Про vi(m)
От: Erop Россия  
Дата: 25.02.10 11:15
Оценка: :))) :))) :)
Здравствуйте, IID, Вы писали:

IID>в студии CTRL+SHIFT+F. А что значит выделенное ?

Видимо можно юзать без смеха
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Про vi(m)
От: Roman Odaisky Украина  
Дата: 25.02.10 11:16
Оценка: 4 (3)
Здравствуйте, Mamut, Вы писали:

M>А все остальное — поиск, jumplists, регэкспы и т.п., оказывается, существуют и в других редакторах.

M>После чего возникает резонный вопрос — а что именно им не снилось и что именно уметт vi(m) такого, что другие не умеют?

Естественно, существуют. Ты же не думаешь, что древний холивор «vi vs. emacs» основывается на том, что один умеет, а второй нет? Возможности этих двух примерно равны, а вот подходы очень разные. Разница-то и есть в том, где работать удобнее
M>иногда vi(m) позволяет нажать чуть меньше клавиш, чем другие редакторы.

Если же сравнивать vi и (вставить IDE сюда), то быстро обнаружится, что
M>vi(m) не позволит сделать вот такой
Автор: Пацак
Дата: 24.02.10
никакой рефакторинг

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



Считая флейм «текстовый редактор vs IDE» закрытым, перейдем к собственно vi. Какие преимущества дает модальный редактор? Только те, которые ты назвал — «позволяет нажать чуть меньше клавиш». Например, в vi команда «удалить 10 символов» звучит как «10x», а в Emacs — «M-1 0 C-d», что по сути то же самое, только без модификаторов. Это, и еще то, что в Emacs можно запускать кучу программ и работать с ними примерно так же, как с текстовыми буферами, и составляет основную разницу между ними.

Теперь о редакторах в IDE на примере MSVS. Они оптимизированы для работы с кодом, например, команды вроде C-k C-c — «закомментировать строку или выделение». Vi особенно полезен, когда нужно просто жонглировать с текстом, преобразовывая его из одной формы в другую. Например, твои действия, если тебе нужно набрать следующее:

trusted_addresses = [
    "192.168.42.1",
    "192.168.42.17",
    "192.168.42.18",
    "192.168.42.19",
    "192.168.42.20",
    "192.168.42.21",
    "192.168.42.22",
    "192.168.42.23",
    "192.168.42.24",
    "192.168.42.25",
    "192.168.42.26",
    "192.168.42.27",
    "192.168.42.28",
    "192.168.42.29",
    "192.168.42.30",
    "192.168.42.31",
    "127.0.0.1",
]
?

Что в vi и Emacs есть, а в типичных редакторах в IDE нет, — это командная строка. Например, добавить комментарий в конец каждой строки, в которой встречается некая подстрока — «:g/подстрока/s/$/ # TODO: take over the world/». Или добавить строчки рядом — «:g/MD_Update(&m,buf,j);/normal "a[p"b]p», где в регистре a лежит что-нибудь вроде «/*\n * Don’t add uninitialised data.» (положено туда с помощью выделения и «"ay»), и в b аналогично — и нужные строчки будут закомментированы, причем блоки будут вставлены с нужным отступом (потому что [p и ]p). Да хотя бы :sort — в редакторе MSVS это есть?

В 80% случаев vi позволяет работать просто чуточку быстрее и удобнее, в 15% — намного быстрее и удобнее, в 5% — менее быстро и удобно :-). Как-то так.
До последнего не верил в пирамиду Лебедева.
Re[3]: Про vi(m)
От: DOOM Россия  
Дата: 25.02.10 11:17
Оценка:
Здравствуйте, IID, Вы писали:

IID>в студии CTRL+SHIFT+F. А что значит выделенное ?

Ну — ты возможности грепа представляешь? В студии, помнится, разве что метасимволы можно было задавать.
Re: Про vi(m)
От: haba_haba_haba Россия  
Дата: 25.02.10 11:57
Оценка:
Здравствуйте, Mamut, Вы писали:


M>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом? Только убедительная просьба. Если будете считать количество клавиш, то разница должна быть на порядок хотя бы, а не на одно-два нажатия


Вот ведь неугомонный.
На порядок, так на порядок:
Напиши мне в студии 15000 строк вида:


Я больше не буду создавать таких тем!


В виме на это потребуется 5+37+1 = 43 нажатия клавиш.
15000oЯ больше не буду создавать таких тем!<ESC>

В студии посчитай сам. Если не использовать копирование — примерно 15000*(37+1). Или поменьше, если его использовать.
Re[2]: Про vi(m)
От: Eugeny__ Украина  
Дата: 25.02.10 12:26
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:


RO>В 80% случаев vi позволяет работать просто чуточку быстрее и удобнее, в 15% — намного быстрее и удобнее, в 5% — менее быстро и удобно . Как-то так.


Итого, получается, что vi удобен для редактирования конфигов, написания несложных скриптов и пр. Просто в соседней ветке активно обсуждается его удобство именно при написании программ на с/c++, а это уже совсем другое. Там редактор, как таковой, далеко не главное. Там, все-таки, желательно иметь IDE.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[3]: Про vi(m)
От: landerhigh Пират  
Дата: 25.02.10 12:31
Оценка:
Здравствуйте, Mamut, Вы писали:

F>>Ну как бы классическое: выделить текст и пропустить через произвольный набор внешних фильтров

M>Ч0рт. Надо было еще попросиь приводить примеры и юзкейс.
M>Что такое произвольный набор внешних фильтров, что такое внешние фильтры, и зачем это нужно?
sort, grep. You name it.

Приходится использовать довольно часто.
www.blinnov.com
Re: Про vi(m)
От: gyraboo  
Дата: 25.02.10 12:32
Оценка: 2 (1) +1
Здравствуйте, Mamut, Вы писали:

M>После чего возникает резонный вопрос — а что именно им не снилось и что именно уметт vi(m) такого, что другие не умеют?


M>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом? Только убедительная просьба. Если будете считать количество клавиш, то разница должна быть на порядок хотя бы, а не на одно-два нажатия


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

public void MyFunction(Integer param1,
                       Integer param2,
                       String s) {
...
}


В обычном редакторе:
END CTRL+LEFT CTRL+LEFT SHIFT+DOWN SHIFT+DOWN SHIFT+END LEFT LEFT LEFT
итого 8 нажатий

VIM:
$ v i (
итого 4 нажатия

В 2 раза меньше. Вроде бы небольшая разница, даже не на порядок. Но самое интересное дальше.
Если форматирование будет более сложным, а количество параметров больше, то в обычном редакторе во-первых, количество нажатий будет расти, а во-вторых мы должны каждый раз индивидуально применять примитивные средства HOME, SHIFT и клавиши курсора для навигации по хитро-форматированному фрагменту кода.
А в Виме остаются все те же 4 нажатия и никакой лишней мыслительной деятельности независимо от того насколько вычурно и сложно отформатирован код
(потому что указанная комбинация сработает в любом случае, главное чтобы курсор оказался внутри скобок). А если нужно выделить текст внутри других парных символов, скажем квадратных скобок или кавычек, то достаточно нажать $ v i "

public void MyFunction(
                       Integer param1,
                       Integer param2,
                       Integer param3,
                       Integer param4,
                       Integer param5,
                       Integer param6,
                       String s
                      ) {
...
}
Re[2]: Про vi(m)
От: landerhigh Пират  
Дата: 25.02.10 12:52
Оценка:
Здравствуйте, gyraboo, Вы писали:

G>Работая в редакторе той же Студии после Вима — чувствуешь себя инвалидом.


Воот. Именно так.
www.blinnov.com
Re[3]: Про vi(m)
От: frogkiller Россия  
Дата: 25.02.10 12:52
Оценка: 2 (1)
Здравствуйте, Mamut, Вы писали:

M>>>Так вот мне стало интересно. О чем же именно не могут даже и мечтать другие редакторы по сравнению с vi(m)'ом?

F>>Ну как бы классическое: выделить текст и пропустить через произвольный набор внешних фильтров

M>Ч0рт. Надо было еще попросиь приводить примеры и юзкейс.


M>Что такое произвольный набор внешних фильтров, что такое внешние фильтры, и зачем это нужно?


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

:vsplit имя_файла        # при вводе имени автокомплит по tab
# окно разбивается на две части, в новой половине открывается этот файл
# обращаю внимание, что файл бинарный, многие символы заменяются специальными последовательностями
# смотрю глазами примерный формат того, что наснимал мне tcpdump
gg                       # переход в начало файла
shift-v                  # режим выделения по строкам
shift-g                  # выделение до конца файла
:'<,'>!perl -lne 'print $1 if /(y=[\w+\.]+)\W/' | sed -e 's/^www\.//' | sort | uniq -c | sort -nr
# на самом деле я нажал "!" и в командной строке появилось :'<,'>!
# в результате получил нужную мне статистику (пример упрощён, в действительности я также считаю
# разные квантили, но это совсем другая история, опять-таки sed здесь не обязательно использовать,
# но я несколько раз переписывал эту строчку, в какой-то момент добавил sed)
shift-v
gg
y                        # копирую выделенное в буфер
:q!                      # закрываю бинарный файл без сохранения (можно ZQ, но я ппредпочитаю :q!)
p                        # вставляю нужные данные в отчёт


Считай "нажатия клавиш"

Да, в случае, если мне не понравилось, что я сделал своим фильтром, лёгким движением руки:
u                        # отмена всей фильтрации
gg                       # переход в начало файла
shift-v                  # режим выделения по строкам
shift-g                  # выделение до конца файла
!                        # появляется командная строка
# жму стрелки вверх-вниз, нахожу строку фильтра, редактирую её и повторяю дальнейшие действия


Теперь скажи, как бы ты делал такое в MSVS/Notepad/Eclipse
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[3]: Про vi(m)
От: Roman Odaisky Украина  
Дата: 25.02.10 13:02
Оценка:
Здравствуйте, Eugeny__, Вы писали:

E__>Итого, получается, что vi удобен для редактирования конфигов, написания несложных скриптов и пр. Просто в соседней ветке активно обсуждается его удобство именно при написании программ на с/c++, а это уже совсем другое. Там редактор, как таковой, далеко не главное. Там, все-таки, желательно иметь IDE.


С автодополнялкой, которая проберется через шаблонные дебри? Возможно. Хотя я разрабатывал одну программу на C++ сначала в Eclipse, потом в Qt Creator, а потом и вовсе вносил мелкие изменения в vi и было вполне хорошо и удобно. Хотя программа и не особенно велика, всего лишь несколько тысяч строчек.
До последнего не верил в пирамиду Лебедева.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.