Чи можу я змусити vim змінити свою поведінку курсора?


11

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

Ось лише один приклад того, чому це проблема, якщо я хочу видалити останнє слово на рядку, я натискаю, $щоб перейти до кінця рядка, а потім dbвидалити назад. Це залишає символ видалити, тому що $НЕ дійсно йти до кінця рядка, вона пішла на останній символ рядка , і dbвидаляється тільки те , що було до того поточного символу. Проблема не в тому, що мені доводиться вводити зайвого персонажа, це зайва думка, яка займається тим, що повинно бути простим, що відволікає мою увагу від того, що я насправді намагаюся досягти.

Мені здається, що більш сучасне розміщення курсору ідеї у всіх відношеннях вище, і я хотів би перейти vimна використання такого підходу. Я впевнений, що деякі vimшанувальники ядра не погоджуються з моїм поглядом на це, але оскільки одним із стандартних аргументів для vimпереваги 's є її нескінченна налаштованість:

  • чи може це доставити в цьому випадку?
  • Чи vimможна зробити так, щоб розмістити курсор між символами?

2
Здається, ви шукаєте Insertрежим або пропустите точку normalрежиму. Я б зробив $dawабо $bdwвидалив останнє слово з рядка в звичайному режимі. У Insertрежимі я би робив A<Ctrl-w>.
jw013

3
Для запису, як людина, яка лякається самої ідеї про мережевий світ "між символами", правильна послідовність клавіш для видалення останнього слова з поточного рядка$bD
Алан Керрі

1
Використання миші не є ідеальним, але значна неефективність настає, коли вам доведеться зупинитися і подумати про те, як робити те, що ви хочете зробити. Справжня річ, яка дорогоцінна, - це не секунда тут і там, а фокус . Коли ви втрачаєте фокус, ви втрачаєте набагато більше декількох секунд.
іконоборство

2
З коментарів поки що це звучить як відповідь на питання: "Ні, ця модель руху курсору безповоротно вбудована в дизайн vim і не може бути змінена". Це правильно?
іконоборство

2
@iconoclast Це теж мій висновок. Наскільки я можу сказати, неможливо в vi або vim поводитись з усіма символами на рядку рівномірно, завжди є виняток для першого або останнього символу.
Жил 'SO- перестань бути злим'

Відповіді:


5

Можна :set virtualedit+=onemore, що дозволяє пройти лише повз останнього персонажа. На жаль для вас, $все ще йде до останнього персонажа; вам доведеться навести курсор, щоб пройти його. З іншого боку, ви можете використовувати g$, що зазвичай переходить до останнього символу екранного рядка на лінії, яка завертається; в onemoreрежимі він також проходить повз останнього символу незагорнутої лінії (або останнього рядка екрану загорнутої лінії).

:h 'virtualedit' каже, що цей варіант може зіпсувати сценарії, але я не знаю, наскільки великий ризик насправді.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.