Могу ли я заставить vim изменить поведение курсора?

11

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

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

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

  • это может доставить в этом случае?
  • Можно vimли разместить курсор между символами?
иконоборец
источник
2
Похоже, вы ищете Insertрежим или отсутствует точка normalрежима. Я бы сделал $dawили $bdwудалить последнее слово в строке в обычном режиме. В Insertрежиме я бы сделал A<Ctrl-w>.
jw013
3
Напомним, что как человек, который напуган самой идеей о том, что мир мертвых "между персонажами", правильная последовательность клавиш для удаления последнего слова в текущей строке$bD
Алан Карри
1
Использование мыши не является идеальным, но значительная неэффективность возникает, когда вам приходится останавливаться и думать о том, как делать то, что вы хотите сделать. Реальная вещь, которая драгоценна, не секунда здесь и там, но сосредоточенность . Когда вы теряете фокус, вы теряете гораздо больше, чем несколько секунд.
иконоборчество
2
Из комментариев пока звучит, что ответ на вопрос: «Нет, эта модель перемещения курсора безвозвратно встроена в дизайн vim и не может быть изменена». Это правильно?
иконоборчество
2
@iconoclast Это тоже мой вывод. Насколько я могу судить, в vi или vim невозможно обрабатывать все символы в строке одинаково, всегда есть исключение для первого или последнего символа.
Жиль "ТАК - перестань быть злым"

Ответы:

5

Вы можете :set virtualedit+=onemore, что позволяет вам пройти только мимо последнего персонажа. К сожалению для вас, $до сих пор идет до последнего персонажа; Вы должны навести курсор, чтобы пройти это. С другой стороны, вы можете использовать g$, что обычно идет до последнего символа строки экрана в строке, которая переносится; в onemoreрежиме он также проходит за последним символом строки без переноса (или последней строки экрана с переносом строки).

:h 'virtualedit' говорит, что эта опция может испортить сценарии, но я не знаю, насколько велик риск в реальности.

echristopherson
источник