Почему изменение регистра слов изменяет поведение в макросе? - PullRequest
0 голосов
/ 15 октября 2018

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

Вот пример с vim -u NONE для файла с одним предложением

это тестовое предложение

с моим курсором в началев предложении я набрал v i w ~ мое предложение теперь:

ЭТОПример тестового предложения

Я перемещаюсь вперед на 1 слово с помощью w и нажимаю . , чтобы повторить действие.Мое предложение теперь:

ЭТО ЕСТЬ Примерное тестовое предложение

w .

Это и есть пример тестового предложения

w .

Это и есть несколько тестовых предложений

w .

Это и есть следующее предложение ТЕСТ

То же самое происходит, когда я вместозахватывать действия как макрос вместо использования .

Я подозреваю, что vim просто меняет регистр с тем же количеством букв, которое было в первом слове, но почему?Почему viw не работает в макросах?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я подозреваю, что vim просто меняет регистр с тем же количеством букв [...]

Вы правы.Чтобы делать то, что вы ожидаете, Vim должен будет помнить, как вы создали визуальный выбор.В вашем примере это было легко (iw), но вы можете применить несколько текстовых объектов и движений, использовать o, чтобы переместиться на другую сторону выделения, изменить это и так далее.Это было бы очень трудно воссоздать в другом месте, и чтобы избежать противоречивого поведения, Vim постоянно действует глупо и просто использует предыдущую ширину выделения при повторном выполнении с помощью команды ..

Если вы хотите применить операциюдля определенного текстового объекта или движения, пропустите визуальный режим и вместо этого используйте соответствующее отображение движения;например, g~iw вместо viw~.

0 голосов
/ 15 октября 2018

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

С :help .:

Note that when repeating a command that used a Visual selection, the same SIZE
of area is used, see visual-repeat.

и с :help visual-repeat:

When repeating a Visual mode operator, the operator will be applied to the
same amount of text as the last time:
- Linewise Visual mode: The same number of lines.
- Blockwise Visual mode: The same number of lines and columns.
- Normal Visual mode within one line: The same number of characters.
- Normal Visual mode with several lines: The same number of lines, in the
  last line the same number of characters as in the last line the last time.
The start of the text is the Cursor position.  If the "$" command was used as
one of the last commands to extend the highlighted text, the repeating will
be applied up to the rightmost column of the longest line.

Одной из сильных сторон Vim является то, что выне нужно выделять текст, прежде чем делать много действий.В этом случае вы должны использовать оператор :help g~, который будет повторяться с . более интуитивно понятным способом:

g~iw

вместо:

viw~

demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...