LINUX.ORG.RU

Vim: быстрая навигация в insert mode - ваши Best Practices?

 ,


1

4

Vim.

Как вы осуществляете быструю навигацию в insert mode?

Лично я, не придумал ничего лучше вот этого:

imap     <F9>           <Left>
imap     <F10>          <Down>
imap     <F11>          <Up>
imap     <F12>          <Right>

imap     <C-F12>        <C-o>W
imap     <C-F9>         <C-o>B
или вот этого, более предпочтительного варианта с хаком для Alt в терминале:
" хак для Alt в терминале
for i in range(65,90) + range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

inoremap <A-h> <C-o>h
inoremap <A-j> <C-o>j
inoremap <A-k> <C-o>k
inoremap <A-l> <C-o>l

inoremap <A-L> <C-o>W
inoremap <A-H> <C-o>B

Кто не понял, это для того, чтобы не переключая режимы быстро перемещаться по тексту, как «h j k l B W» в normal mode. Не используя стрелки, до которых неудобно и больно тянутся мизинцем правой руки.

Кто-то может сказать, что это несколько противоречит идеологии последовательности работы в normal/insert режимах. Ну, должен заметить, что это реально удобно и эффективнее переключению режимов.

Быть может вы используете более удобный вариант? Какой? Как перемещаетесь в insert mode?

★★☆

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

Ответ на: комментарий от nikodymus

За хак спасибо.

только учти, что стрелки в insert mode теперь поломаны, я не заморачивался их чинить обратно :)

science ★★☆
() автор топика

Одна из причин ухода на emacs для котинга. Но vim по-прежнему использую для блокнота и конфигов. (в софте vim-like стал «+»)

anonymous
()

You're doing it wrong

Зачем пытаться превратить vim в подобие обычного редактора? Зачем отказываться от repeat last edit по ., от repeat last movement по ;, от нормального undo, наконец? Объясните. Esc можно на Caps ремапнуть, если лень до него тянуться.

n15n
()
Ответ на: You're doing it wrong от n15n

You're doing it wrong

repeat last edit по .
repeat last movement по ;
undo

Какое это имеет отношение к быстрой навигации на 3-5 символов в insert mode?

Объясните.

Давай по чесноку, сдвинуть курсор на два символа назад (например) по Alt+h - это быстрее, чем переключатся в другой режим, перемещаться и опять входить в insert mode.

Esc можно на Caps ремапнуть, если лень до него тянуться.

А какая разница на чем у вас Esc? Ведь всё равно придется прыгать между режимами.

science ★★☆
() автор топика

Быть может вы используете более удобный вариант? Какой? Как перемещаетесь в insert mode?

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

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

Какое это имеет отношение к быстрой навигации на 3-5 символов в insert mode?

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

void myFooBar();
на
void myZooBatman();
лучше с помощью
<del>Z<A-l><A-l><A-l><A-l><A-l><del>tman
нежели с помощью
ct(ZooBatman<Esc>

А какая разница на чем у вас Esc? Ведь всё равно придется прыгать между режимами.

Это не баг, это фича.

n15n
()

Как вы осуществляете быструю навигацию в insert mode?

Никогда об этом не задумывался — по моему нет ничего проще, чем нажать левым мизинцем Esc, и не морочить себе голову, тем более, что мне совершенно не ясно зачем перемещаться в режиме вставки?

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

Кстати, ОП, можешь попробовать emacs'овский evil-mode. Там в insert работают башо-имексовские сокращения для перемещения. Правда, не все из коробки, но это легко исправить, убрав перекрывающие биндинги из insert state.

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

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

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

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

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

В смысле, а в normal mode ты тоже перемещаешься курсорными клавишами, вместо w, b, f *, hjkl и так далее?

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

Ну почему же. Особенно люблю регекспы.

hjkl

А вот это - буэээ.

thesis ★★★★★
()

Перемещаюсь стандартными клавишами Arrow-*

blackst0ne ★★★★★
()

vim из коробки умеет shift + стрелочки, ими и перемещаюсь.

Spoofing ★★★★★
()

быстрая навигация в insert mode

/0

зачем там навигация, если это режим ВСТАВКИ? Смотри: у землекопа есть режим «бегать» и режим «копать». Зачем быстро бегать в режиме «копать»?

F-кнопки нужны мне для другого. F9 например - «собирать». Мне что, в другой режим переключаться, что-бы собрать, то, что я написал?

Кто не понял, это для того, чтобы не переключая режимы быстро перемещаться по тексту, как «h j k l B W» в normal mode.

дык пальцы сломаешь. Ты ещё посоветуй по alt+shift раскладку переключать.

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

Зачем там навигация, если это режим ВСТАВКИ?

Чтобы быстро править опечатки.

пальцы сломаешь

Нет. Зажимаешь левый альт большим пальцем левой руки и правой бегаешь по hjkl точно так же, как в normal mode. При этом пальцы остаются на базовой позиции. Можно рассматривать такую технику как еще один режим - semi-normal :)

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

Да, к ним надо тянуться. Это раздражает.

я намекаю, что тебе необходимо внимательнее выбирать клавиатуры. HJKL это всё равно костыль. Но всё равно, спасибо вам с ТС, возьму на заметку. Пригодится.

drBatty ★★
()

Это противоречит идеологии вима.
Лично я никакие грязные хаки не использую, а просто перехожу в normal mode и пермещаюсь куда надо. Если приходится ну ооочень часто делать микроперемещения из insert mode, то, скорее всего, делаешь что-то не так.

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

а что проблемного с переключением раскладки по Альт-Шифт? я со времен ДОСа такой схемой пользуюсь. Ничего сложного. Используются как правило большой палец и мизинец левой руки. На Контрол-Шифт, любимый некоторыми, никак не могу переключиться без разрыва шаблона.

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

менять редактор.

Еще раз, если нужно исправить опечатку на расстоянии 2-5 символов, как это сделать быстрее и наименьшим к-вом кнопок?
Я считаю, что быстрее не переключать режим, а нажать ровно 2 кнопки, чем как минимум 5.

science ★★☆
() автор топика

Ну, должен заметить, что это реально удобно и эффективнее переключению режимов.

А как быть с историей, последним действием, такими командами как d2t. и т.д.? Лучше осильте всё это, а notepad.exe и без того есть.

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

Это противоречит идеологии вима.

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

Суть-то в чём? Это та же идеология вима, но замапленная на хоткей. Что делает Alt-h например? Он делает стандартный быстрый вход на одно действие в normal mode и перемещение по h:

:help i_Ctrl-o

execute one command, return to Insert mode
ну а я его просто повесил на хоткей, для быстрого повторения, чтобы не поднимать и перемещать пальцы на повтор действия или еще какой хоткей.

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

Если ты используешь такой хоткей, то зачем вообще отказываться от стрелок?
Если ты собираешься перемещаться в insert mode, то зачем тебе режимы?

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

А как быть с историей, последним действием, такими командами как d2t. и т.д.?

Жмешь Esc и получаешь всю мощь normal mode. Но часто требуется только небольшое подмножество. Суть то в том, что от таких мапингов ничего не теряешь, а только добавляешь немного удобства в insert mode. Меня раньше в виме бесили 2 разные модели перемещения - стрелки и hjkl. А когда додумался замапить Альт стало очень комфортно.

nikodymus
()

Зачем перемещаться по тексту в inset mode? Нажал esc, переместился по тексту.
Если есть необходимость подредактировать текст (пропустил символ), то мне проще нажать backspace и ввести пропущенный символ, чем перемещаться по тексту и вносить исправление.

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

Давай по чесноку, сдвинуть курсор на два символа назад (например) по Alt+h - это быстрее, чем переключатся в другой режим, перемещаться и опять входить в insert mode.

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

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

А какая разница на чем у вас Esc? Ведь всё равно придется прыгать между режимами.

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

p.s. У меня на caps lock переключение раскладки клавиатуры, а esc на своем родном месте.

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

ct(ZooBatman<Esc>

Быстрее и проще в данном случае cwZooBatman<Esc>

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

нежели: переключить режим + переместится + вернутся в режим - это всё-таки больше нажатий и миллисекунд времени :)

Вернуться в режим вставки - это что то у вас не так. Возвращаться нужно в нормальный режим.

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

зачем там навигация, если это режим ВСТАВКИ? Смотри: у землекопа есть режим «бегать» и режим «копать». Зачем быстро бегать в режиме «копать»?

Отличная аналогия, плюсую.

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

Чтобы быстро править опечатки.

Еще раз - backspace.

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

я задолбался с этими режимами и слез на emacs

Это одна из полезнейших фич вима. Я емакс так и не смог осилить из-за отсутствия режимов.

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

Меня раньше в виме бесили 2 разные модели перемещения - стрелки и hjkl

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

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

первые два - да, последний вроде ок, может быть, если три года назад он уже был в нормальном виде, сидел бы на нём, а так - уже осилил родные емаксовые комбинации и назад в режимы не хочу совсем

lazyklimm ★★★★★
()

Например так:

  • <c-o>{motion} (<c-o>A, <c-o>b, ...)
  • jj{motion}{motion}[aiIAC] (jj замапен на <esc>)
  • jj{motion}c{motion|text-object} (jj замапен на <esc>)
  • (<c-w>|<c-u>|<c-h>){corrected} (abc<c-w>xyz, ...)
xaizek ★★★★★
()
Ответ на: комментарий от lazyklimm

знаю, 3 года просидел, до емакса - как до пекина раком

Тут я с вами соглашусь. Емакс хороший редактор, но до вима ему далеко.

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

Емакс хороший редактор

4.2, емакс это лисп-машина. А редакторов в ней несколько.

Кстати, благодаря этому емакс гораздо более настраивабельный и органичный. В тот же vim скриптование (на принципиально новом язычке, что характерно) впилено сбоку на соплях.

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