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)
Ответ на: комментарий от theNamelessOne

smartparens-mode

Специально не стал упоминать про это. В виме поди тоже есть такой.

no-such-file ★★★★★
()

Давайте подумаем и приведем конкретные примеры того, где модальность в виме действительно обходит управление текстом emacs'a

Нигде. Этот маленький примерчик вскрыл 2 проблемы - переход в командный режим и обратно требует последовательных нажатий, и чтобы перемещаться по тексту нужно переключаться туда-сюда. В итоге ESC w i всегда проиграет M-f.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

У тебя один палец чтоли?

Ты способен осознать, что такое «нажатие на клавишу»? Чем нажатие на «Alt» отличается от нажатия на «f» можешь сказать?

kawaii_neko ★★★★
()
Ответ на: комментарий от no-such-file

чтобы перемещаться по тексту нужно переключаться туда-сюда

В 2017 году у клавиатур есть блок со стрелками, а также pgup/pgdown, и это все расчудесно работает в insert mode.

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

В иксовом vim-е C-Right

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

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Нет ничего ущербнее фанатиков. Если тебе нужно удаление слова в insert mode — inoremap тебе в помощь, если нет — C-odiw.

Еще раз повторюсь: никто не заставляет пользоваться дефолтом vim/emacs, просто в vim дефолт вменяемый, а в emacs — нет.

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

Если тебе нужно удаление слова в insert mode — inoremap тебе в помощь

А если мне нужно удаление sexp? А если мне нужно переходить по скобкам? Может сразу в emacs перейти, всё уже есть?

C-odiw

Все равно длиннее M-b M-d

no-such-file ★★★★★
()

Без применения замены и регулярок и прочего. Просто редактирование.

xed = 12 нажатий

xed+mouse = 10 нажатий

пищи дальше.

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

Ты способен осознать, что такое «нажатие на клавишу»?

Ты способен осознать что мы считаем последовательные нажатия, которые нажал-отпустил, а M-f это одномоментное нажатие?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Ты способен осознать что мы считаем последовательные нажатия, которые нажал-отпустил, а M-f это одномоментное нажатие?
no-such-file ★★★★★ (15.01.2017 18:24:12) Чудик, который не понимает, что такое «на несколько порядков».

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

Дело в том, что лично до меня начинает доходить одна простая истина: основного набора примитивов для работы с текстом в emacs'e достаточно чтобы быстро редактировать текст. Я прихожу к мнению, что в виме надо выносить все основные примитивы работы с текстом по типу emacs'a. Это реально будет быстрее, чем эти примитивы делать в normal mode.

PS: более чем уверен в том, что если примитивы имакса забиндить, то поход в normal mode будет через какое-то время что-то из ряда вон выходящее

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

Я прихожу к мнению, что в виме надо выносить все основные примитивы работы с текстом по типу emacs'a. Это реально будет быстрее, чем эти примитивы делать в normal mode.

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

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

Ты не поверишь с какой горечью в голосе я произношу эти фразы. По факту переход в normal mode не ощущается, но! Он начинает ощущаться тогда, когда этот самый переход осуществляется очень много раз на нескольких словах. Вот тогда начинается с дикой скоростью вбив клавишь редактирования и выхода в normal mode. И тогда я начинаю понимать, что что-то тут не так. И легче просто тупо удалить эту часть и заново ее напечатать. И это реально быстрее. А занимать свой мозг подсчетом слов или символов, чтобы сделать 4x или 4daw - легче зажать C и зажать d(или b) или зажать M и d(или b) и визуально проследить за тем, когда эту комбинацию отжать. Увы:(

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

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

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

Набор текста - insert mode, манипуляции с текстом - normal mode. Да, иногда бывает проще нажать <S-s> и ввести текст заново. Но я точно так же сделаю и в другом редакторе - выделю весь текст и напишу его заново.
Если манипуляции однотипные, то проще написать макрос. Благо делается это очень просто. Все это можно делать и в emacs, но мне там делать это неудобно. Отсутствие normal mode в emacs (и остальных редакторах) меня очень напрягает. Напрягает гораздо больше, чем «подсчет» количества объектов для обработки. А кейбиндинги для осьминогов и вовсе делают работу невыносимой.

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

Вот тогда начинается с дикой скоростью вбив клавишь редактирования и выхода в normal mode. И тогда я начинаю понимать, что что-то тут не так. И легче просто тупо удалить эту часть и заново ее напечатать.

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

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

Я прихожу к мнению, что в виме надо выносить все основные примитивы работы с текстом по типу emacs'a. Это реально будет быстрее, чем эти примитивы делать в normal mode.

Да, конечно. Бинди на Alt и все получится, это совершенно свободный модификатор в виме. Справиться с терминалами поможет плагин fixkey.

если примитивы имакса забиндить, то поход в normal mode будет через какое-то время что-то из ряда вон выходящее

Вот это неверно. Будешь постоянно туда ходить, потому что набор текста это от силы половина задач кодера. Для всего остального - normal и command режимы.

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

Справиться с терминалами поможет плагин fixkey.

Спасибо, отличный плагин.

andreyu ★★★★★
()

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

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

как виммер со стажем, лучшим вимом я считаю emacs с evil-mode. Два года радуюсь.

Получается, что вы не пользуетесь vim-плагинами. А раз так, то чем emacs с evil лучше vim без плагинов?

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

А раз так, то чем emacs с evil лучше vim без плагинов?

Рассматривай что это vim без плагинов + плагины Emacs.
Ps.
Думал ты адекватный, теперь сомневаюсь...

robotron5
()

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

Для строк использую. d3j, например . И не подсчитываю, а включил режим относительных строк, оно мне само пишет.

А для слов активно использую t/T/f/F. dtX, например . И дальше точку столько раз, сколько нужно чтобы достичь результата.

А то, что ты описал, 3daw, - это для макросов. А вот макросы я тоже активно использую.

Мораль: каждым инструментом нужно уметь пользоваться.

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

Emacs со всей своей экосистемой перекрывает vim с плагинами как гора мышь. У меня теперь и управление задачами и проектами и программинг и vcs-клиент и правка файликов по ssh на других машинах и дневник и файловый менеджер в одном кроссплатформенном emacs. Если бы не корпоративный Exchange, то и почта была бы в нём (mu4e). При всём этом благодаря evil мне всё равно в чём редактировать текст: хоть в emacs хоть в vim.

stalkerbss
()
Ответ на: комментарий от no-such-file

А если мне нужно удаление sexp? А если мне нужно переходить по скобкам? Может сразу в emacs перейти, всё уже есть?

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

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

Emacs со всей своей экосистемой...

...к 2017 году так и не сумел обзавестись приличным текcтовым редактором. Пробовал я пересесть на него — много траха с elisp-ом при околонулевом выхлопе.

При всём этом благодаря evil мне всё равно в чём редактировать текст: хоть в emacs хоть в vim

Это много говорит о твоем низком уровне использования vim.

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

очевидно, ты пишешь расширение для имакс

Очевидно, что ты быдлокодер, который никогда не писал ничего сложнее a = 2+2. А так вообще выражения бывают сложные, с тонной скобок и лисп здесь ни при чём. [] <> {} тоже скобки.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Очевидно, твой предел сложности — это «2+3». Потому что любой, кто писал сколько-нибудь сложную систему знает, что главное — это поддерживаемость. Если в твоем нагромождении скобок черт ногу сломит без специально обученного редактора, значит ты что-то делаешь не так.

kawaii_neko ★★★★
()
Ответ на: комментарий от no-such-file

[] <> {} тоже скобки.

Интересно, ты крестолюб или фронтэнд-программер? А может просто для красного словца «<>» сюда приплел?

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

Интересно, ты крестолюб или фронтэнд-программер?

Интересно, ты съезжаешь с темы чтобы не рассказывать что в виме нет команды перехода на уровень скобок ниже/выше?

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

Любой кто писал сколько-нибудь сложную систему знает, идеальный красивый код бывает только в мире розовых пони.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Любой кто писал сколько-нибудь сложную систему знает, идеальный красивый код бывает только в мире розовых пони.

Между идеальным и поддерживаемым кодом есть существенная разница: если первого не бывает, то ко второму следует стремиться.

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

ко второму следует стремиться

Так вот пока ты к нему стремишься, очень полезно иметь команды для навигации по тому говну которое есть в наличии.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Вроде в режиме вставки почти все движения из нормального режима имеют аналоги через всякие модификаторы. Да и не только движения.

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

А занимать свой мозг подсчетом слов или символов, чтобы сделать 4x или 4daw - легче зажать C и зажать d(или b) или зажать M и d(или b) и визуально проследить за тем, когда эту комбинацию отжать. Увы:(

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

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

А то, что ты описал, 3daw, - это для макросов

Нет, это не для макросов, это чтобы вырезать 3 слова и вставить их в другом месте.

И дальше точку

И первые два слова просто пропали.

no-such-file ★★★★★
()
Ответ на: комментарий от zloelamo

Еще раз: я веду к тому, что все эти свистоперделки, которые есть в виме по факту нафиг не нужны, если быстрей перепечатать кусок кода, нежели прыгать в normal mode и делать всякие fjxxxlisomefj, где fj - прыгнуть в normal mode т.е в имаксе всех этих примитивов для редактирования хватает для более эффективной работы с текстом. И в конечном итоге, если дать на редактирование какой-то кусок кода, то эмаксеры его отредактируют быстрее т.к они не будут прыгать в normal mode, чтобы там что-то удалить или подрихтовать, они просто воспользуются примитивами типа удалить символ или удалить слово и без прыжков в normal mode у них это получится быстрее и с меньшим кол-вом нажатых клавишь. Они просто по другому мыслят. Они прыгают в коде и удаляют символы или слова, а если видят, что там дофига надо чего редактировать, то они просто делают C-k(удалить до конца строки) и просто это дело перепечатывают и по факту этот подход более продуктивный. В конечном итоге это означает то, что имаксеры более продуктивны, чем вимеры

КАК БЫ НЕ ПЕЧАЛЬНО ЭТО ЗВУЧАЛО:(

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

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

При этом да, в режиме вставки vim беднее чем emacs, но это не такая уж и проблема.

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

Дядь, как я могу нормальным считать insert mode, если я вынужден всегда находиться в normal mode ? Это начинают понимать все, кто пользовался вимом больше месяца. Ты напечатал слово, задумался ? Если да, то ты уже должен быть в normal mode, иначе вся эффективность использования вима пропадает тут же.

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

Нормальный режим доступен в режиме вставки через модификаторы. Тут вопрос баланса, где каждый vim'ер выбирает для себя сам. Если вообще баланс сместился в режим вставки, то vim не нужен, имхо. Переключения - лишняя сущность. В ход идут аккорды.

Deleted
()

Думаю, что идеальным было бы не пересаживаться на эмакс, а в виме в insert mode прикрутить все примитивы управления текстом и пользоваться этим. А в normal mode выходить уже по реальной необходимости. Но сделать это(имеено дёрнуть примитивы) - дело хлопотное, а использовать плагин vimacs - конкретный оверхед.

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

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

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

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

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