LINUX.ORG.RU
решено ФорумTalks

Эффективность модальности в vim

 ,


0

4

Окей, давай рассмотрим конкретный случай! Без применения замены и регулярок и прочего. Просто редактирование. Находимся мы в начале строки. Опиши твои действия. Есть строка:

cur.execute("some")
Мне надо превратить ее в:
kwargs['cur'].execute("some")
В виме это(используя плагин tpope/vim-surround):
i
kwargs
fj
ysw]
l
ysw'
Итого, 18 нажатий

Или не прибегая к сторонним плагинам:

ikwargs['fjea']fj
Итого, 17 нажатий

В эмакс это:

kwargs[' + M-f + ']
Итого: 11 нажатий

Получается, что используя модальность, мы получаем бОльшее число нажатий. Вообще, в виме очень широко разрекламированы такие сочетания как 3daw. Но тут возникает вопрос «а кто это активно юзает ?». Кто при редактировании больше 3 слов в перед считает слова, перед тем, как произвести над ними какие-то действия ? Врядли это можно до автоматизма довести. Я за 12 лет максимум 2daw делал. Удалять строки тоже не удобно(типа 12dd, ага, прям пошел и начал считать сколько строк вниз мне надо удалить), вместо этого делается S-v}, чтобы удалить параграф. Но и тут по дефолту приходится подправлять позицию курсора(аля k). Это исправляется, да, но возникает вопрос того, что не так это эффективно, как пытаются это показать. Давайте подумаем и приведем конкретные примеры того, где модальность в виме действительно обходит управление текстом emacs'a. Но у меня всё больше и больше начинают посещать мысли, что редактирование текста в вим гараздо медленнее, чем это делается даже по дефолту в emacs. Тема не холивора ради. Думаю, что к сожелению модальность реально только мешает программировать т.к из-за модальности получается оверхед в нажатиях по клавиатуре и соответственно во времени, которая требуется для выполнения одних и тех же действий, по сравнению с emacs. А то это пустозвонство, типа vim - это photoshop, только для текста - не более чем «гонять воздух». Т.к реально для кодинга не надо все эти 23dd, а быстрей выделить абзац и нажать delete, чем считать строки. Вот давайте по конкретике и обсудим эффективность модального режима на примерах, чтобы уже раз и навсегда выяснить, что же эффективней в редактировании vim или emacs.

Перемещено tailgunner из development

★★★★

Последнее исправление: bryak (всего исправлений: 4)

как же ты достал.

mos ★★☆☆☆
()

Я еще пост не перечитал, но вставлю сразу верхний коммент:

Когда модальность доведена до автоматизма, то даже мысли такой появиться не может, что она де-неэффективна.

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

То ли дело, когда ты защищен от самого себя режимами.

slon
()
Последнее исправление: slon (всего исправлений: 1)

ты можешь забиндить хоткей, для перемещения по тексту в insert-mode:

ikwargs[' + C-l + ']
Deleted
()
Ответ на: комментарий от Deleted

Тогда уж можно забиндить хоткей, который сразу превращает cur в kwargs['cur'], одно нажатие, чо.

anonymous
()

За все нужно платить. Доп. ресурсы за гибкость. Но мерить это кол-вом нажатых клавиш это сильно, ага.

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

Тогда уж можно забиндить хоткей, который сразу превращает cur в kwargs['cur'], одно нажатие, чо.

Не универсально же.

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

Deleted
()

Блин, ну при чем же здесь 'j', если мы работаем на одной строке и этой буквы в самой строке нет, я пока-что не осилил.

У меня kwargs['cur'].execute("some")  — это 13 нажатий. Или 14 нажатий, если мы закрываем режим после редактирования, surround не используется вообще, только Raimondi/delimitMate, который удваивает кавычки и т.п.

Без каких-либо плагинов на vim -u NONE это 15 нажатий без закрытия режима или 16 с закрытием.

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

Не, это пользователи меряются [censored] _между собой_. А тут пытаются померить emacs и vim. Другой вопрос же, не?

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

Без каких-либо плагинов на vim -u NONE это 15 нажатий без закрытия режима или 16 с закрытием.

13 без закрытия же.

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

С биндами 12, как в Емаксе, за исключением дополнительного i (входа в insert mode).

P.S. Всё это бред. Нужно побольше инструкций. Это мелочь для vim'a.

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

Ну с биндами-то любой дурак сможет (^R, ^O это искоробочные). Надо на -u NONE меряться.

d_a ★★★★★
()

Добавляйте задание на vimgolf и ждите результатов.

andreyu ★★★★★
()

Из личного опыта: никогда не редактировал файлы на сервере, находясь в Малых Гребенях Нижнеурюпинской области с EDGE в качестве интернета? :-) Вот где 12G21dd действительно помогает, особенно если номера строк включены.

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

Ну вот же за 13

не надо читерить, ^O  — две кнопки, я не помню как в вимгольфе, но по-честному нужно считать все кнопки. Так что 14.

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

Я создаю удобство за счет гибкости. А мое удобство !== удобности другого, ибо индивидуальность, а следовательно бессмысленно это. О вкусах же не спорят, я хотел сказать :)

znenyegvkby
()
Последнее исправление: znenyegvkby (всего исправлений: 2)
Ответ на: комментарий от slon

не надо читерить, ^O — две кнопки

Нифига, в OP Meta-F за одну считают и я так буду.

Хотя в OP и нажатие Home тоже не считают, так что можно выкинуть I.

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 2)

Приз зрительских симпатий

:s/cur/kwargs['&']/<CR>

Двадцаточка T_T

d_a ★★★★★
()

Вообще, в виме очень широко разрекламированы такие сочетания как 3daw. Но тут возникает вопрос «а кто это активно юзает ?».

Я. Постоянно. Особенно, не для кода (ибо я в нём и email пишу, и вообще, это единственный текстовый редактор в системе).

Кто при редактировании больше 3 слов в перед считает слова, перед тем, как произвести над ними какие-то действия ?

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

Удалять строки тоже не удобно(типа 12dd, ага, прям пошел и начал считать сколько строк вниз мне надо удалить), вместо этого делается S-v}, чтобы удалить параграф.

Vjjjjjd, лол.

Короче, мне лень дочитывать портянку, ибо это выльется в срач. Не нравится вим, пользуйся имаксом, чего ныть на ЛОРе?

r3lgar ★★★★★
()

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

bread
()

а кто это активно юзает ?

Я юзаю. Отображение нумерации строк и прокачанный в детстве навык арифметических расчётов в уме решает. Зато точно знаю, что удалятся чисто строки. А то с этими вашими выделениями вечно то отступы остаются, то ещё какой мусор, который придётся руками чистить. Плюс их нет в голом vi (не vim).

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

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

anonymous
()

одновременно использую emacs хоткеи и vim модальность и выработалась примерно такая схема: на 1-4 примитива(начало строки, начало слова и т.д.) эффективней не модально; если больше, да еще и с хитрым редактированием (ctx или с вовлечением текстовых объектов), то эффективней покинуть режим редактирования

а вообще вся эта «эффективность» — не эффективность вовсе, а вопрос личного удобатсва

anonymous
()

типа 12dd, ага, прям пошел и начал считать сколько строк вниз мне надо удалить

Относительная нумерация строк есть и в vim, и в Emacs

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

плагин, который показывает нумерацию относительно текущей строки.

:set rnu

+ не помешала бы такая же линеечка, но по горизонтали.

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

Нифига, в OP Meta-F за одну считают и я так буду

Тогда нажимай их одним пальцем, чтобы быть честным перед собой.

bread
()

Модальность удобна для передвижения по тексту и редактирования. Когда курсор не там где надо, чтобы пальцы не тянуть ко всем этим Meta и Ctrl и проч. Вот и всё удобство.

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

Да мне собственно не жаль, если хотите считать модификаторы за отдельный кейстрок, тогда bryak пускай докинет емаксу +1 за Meta и ещё +1 за Home. Игото 13/14 (что внезапно больше чем 12/13).

d_a ★★★★★
()

раз и навсегда выяснить, что же эффективней

Не получится. Есть много действий, где одно сливает другому и наоборот. Результат сравнения будет зависеть от набора тестов. Можно ли составить «идеальный» набор тестов, статистически соответствующий реальной жизни? Вряд ли, у каждого же свои задачи.

Кстати, модальность и у емакса во весь рост - только там «остальные» режимы отключаемые по отпусканию модификатора, т.ч. он будет выигрывать каждый раз, когда виму нужен <ESC>, и проигрывать, когда тому удаётся обойтись кнопкой в основном регистре(я склонен считать shift/alt/control/meta/whatewer тоже кнопками, у вима они жмутся часто). Т.ч. большого выигрыша модальность не принесёт, как минимум в вимовом исполнении.

В конкретном примере, переключение режима даёт достаточную для «победы» фору немодальности. Усложним задачу - сделаем то же с соседями:

cur.execute("some")
cur.execute("other")
и уже неочевидно ( 18+2модификатора: cwkwargs['<C-r>«']<ESC>j0. ). Насколько это преимущество именно модальности не очень понятно, вероятно это следствие какой-то иной особенности.

Возможно, тут стоит говорить про „командность“ vs „интерактивность“ - что может свестись к удобству записи-проигрывания последовательностей команд(кажется, это называлось „макросами“). Т.е. к разговору, какой „язык программирования“ удобнее. Но опять, для какой задачи?

DonkeyHot ★★★★★
()

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

А Vim там уже стоит.

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

И вот у тебя уже Vim режим включен в Idea IDE, Sublime Text, VSCode, в браузер уже поставлен Vimium (или кто чего там любит) и тп.

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

DiKeert ★★
()

Итого: 11 нажатий

А Alt сам собой надавливается чтоли?

Вообще ты что-то странное делаешь. Лови правильный вариант:

ikwargs[' + C-o + w + ']
14 «честных» надавливаний, 13, если модификаторы надавливает святой дух.

Вообще полезность модальности идет от двух вещей:

  1. ctX/cfX/ciw/cw/caw
  2. . (aka repeat last edit)

Богатство команд по удалению/исправлению вкупе с «repeat last edit» помогает в кейсах «слегка поправить н-цать раз». При этом раскладку клавиш vim-а делали люди (и, скорее всего, для людей), а дефолтный emacs вызывает тоннельный синдром через неделю использования.

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

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

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

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

Если речь о vim, то :set relativenumber

andreyu ★★★★★
()

mcedit
12 нажатий

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

^O — две кнопки

Но их можно нажать одним нажатием двумя руками.

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