Я хочу вставить текст так:
similar text wordA similar text ...
similar text wordB similar text ...
similar text wordC similar text ...
Я знаю, что могу вставить текст много раз, а затем использовать подстановку, чтобы изменить одно слово для каждой строки, однако я все еще нахожу этот метод очень неудобным.
Есть ли способ сохранить слово или список слов в «переменную», а затем использовать эту переменную для создания аналогичного текста?
EDIT Я сделал что - то неясное в оригинальном вопросе, на самом деле я пытаюсь сделать некоторые очень похожи определения функций, так что wordA
wordB
... могут появляться несколько раз в каждом клоне текста и текст может содержать много строк. шаблон в точности такой:
similar_text1 wordA similar_text2 wordA similar_text3 ...
similar_text1 wordB similar_text2 wordB similar_text3 ...
similar_text1 wordC similar_text2 wordC similar_text3 ...
(текст может содержать новые строки, а wordA, wordB ... могут существовать много раз)
2-е РЕДАКТИРОВАНИЕ Части «Similar_text» могут отличаться каждый раз, когда я делаю такую работу, поэтому решение для этой работы лучше использовать повторно. Потому что я пытаюсь сделать очень похожие определения функций или таблицу сопоставления строк и функций.
После прочтения ответов и некоторой практики, я обнаружил, что удобнее думать об этой работе как о некой замене, потому что отдельные "part1", "part2" ... "partN", которые могут содержать переводы строк, трудно писать, поэтому пишите сначала шаблон:
similar_text1 $WORD similar_text2 $WORD similar_text3 ...
(text may contain <ENTER>, make sure $WORD not exist in "similar_text" parts )
Тогда попытка поместить клоны текста, но замена $ WORD списком слов, является более прямым мышлением.
Так что, похоже, моя проблема изменилась так: «Как много раз клонировать текстовый блок, но каждый раз, подставляя в нем ключевое слово словом из списка?»
источник
Ответы:
Вы можете использовать следующую функцию:
В переменных
firstpart
иsecondpart
поместите текст для повторения до и после слов, а в спискеwords
- слова, которые должны измениться.Затем цикл создаст содержимое строки для каждого слова списка, вставит строку в буфер и перейдет к этой новой строке.
Вы можете просто вызвать функцию:
call GenerateLines()
.Редактирование Чтобы упростить манипулирование, вы также можете передавать различные части в качестве аргументов, функция должна выглядеть следующим образом:
И вы можете назвать это так:
источник
call map(a:words, 'a:firstpart . v:val . a:secondpart')
иcall append(line('.'), a:words)
.Моя стратегия в таких случаях будет разной, но часто она состоит из следующих шагов:
Напишите уникальное слово (слова), например
Или
а) выполнить поиск и заменить, например,
б) или используйте режим визуального блока, см
:h blockwise-visual
. В частности, я выберу слова и использую,I
чтобы вставить аналогичный текст впереди илиA
добавить аналогичный текст после.Я бы сказал, что эта стратегия имеет смысл, когда вы делаете такие задачи редактирования относительно редко. Однако, если вы обнаружите, что вам нужно делать это часто, вы должны следовать предложению @ statox с функцией, которая расширяет список слов.
источник
:read
после вашей замены имеет большой смысл.Я буду утверждать , что это работа для визуального блока ( Ctrl+ v). Сначала я бы написал все разные слова:
Начиная с курсора на первом,
w
я бы затем выполнил:Я могу контролировать, сколько столбцов мне нужно, нажимая
A <esc>p
столько раз, сколько я хочу. Давайте предположим, что мне нужно три столбца, как показано в приведенной выше команде. Теперь у нас есть это:И курсор находится в начале 3-го
wordA
в первой строке. Далее я бы выделил столбец пробелов между столбцами, идущими назад и добавив текст между ними. Из текущего местоположения курсора:Это приводит к (% отмечает положение курсора):
Повторите для следующего столбца:
И последний / первым (один слева) колонок:
В итоге получается:
Обновление: добавлен скринкаст
Кажется, это много набирает текст, но на самом деле к нему очень легко привыкнуть. Это дает вам свободу изменять количество слов, количество столбцов и даже расстояние между столбцами.
Недостатком является то, что вам нужно знать количество отдельных слов, которые вы используете. У меня есть
5
жестко закодированные во всех командах выше, потому что это число строк, над которыми работают команды.Примечание по отладке: все команды начинаются и заканчиваются в обычном режиме, если вы оказались в визуальном режиме или в режиме вставки в конце команды, вы делаете что-то не так.
источник