удалить переводы строк из реестра в vim? - PullRequest
4 голосов
/ 03 июня 2011

У меня длинный список разных названий университетов.Я пытаюсь создать таблицу синонимов, сопоставляя строки с определенными уникальными ключевыми словами;то есть в файле я определю, что Гарвард является ключевым словом здесь:

Harvard Business School|
Harvard College|
Harvard School of Divinity|

и вставлю их в другой файл как

Harvard Business School|Harvard College|Harvard School of Divinity|

Я делал это с помощью поискадля слова под курсором вставьте строки с этим словом в регистр, вставьте регистр в другой файл и используйте команду соединения «J» для объединения строк:

[ clear register 'a' ]    
0"ay0
[ move cursor to 'Harvard" and yank lines with keyword into register a ]
:g/\<<CTRL-R><CTRL-W>\>/y A
[ move to other screen and paste ]
"ap
[ join lines ]
JJJJJ

Это работает просто отлично, но я бы хотел, чтобы это было упрощено.В частности, я хотел бы знать, как удалить символы новой строки из регистра, чтобы мне не приходилось использовать JJJJ для ручного соединения строк на последнем шаге.Я хотел бы найти все строки, содержащие слово под курсором, скопировать их в регистр «a», удалить новые строки из регистра «a», а затем вставить содержимое регистра «a».

Есть идеи?

РЕДАКТИРОВАТЬ: Я знаю:

  • , как искать и заменять глобально, например,% s / \ n // g
  • , как искать изамените 'foo' в буфере из слова в содержимое регистра, например:% s / foo / a / g
  • как искать содержимое регистра и заменить на 'foo' вбуфер, например:% s / a / bar / g

Что мне нужно знать:

  • как искать и заменять 'foo' на 'bar' из регистра«a» для регистрации «b»
  • как искать и заменять «foo» на «bar» из регистра «a» для регистрации «a»

Ответы [ 4 ]

5 голосов
/ 03 июня 2011

Чтобы сделать это напрямую с текстом в регистре a, вы можете использовать эту команду:

:let @a=substitute(strtrans(@a),'\^@',' ','g')

Затем вы должны получить желаемые результаты при вставке регистра a обратно.

2 голосов
/ 04 июня 2011

Вам не нужно удалять переводы строк из регистра или нажимать более одной J: при следующем отображении это будет "apgVJ:

nnoremap <expr> gV    "`[".getregtype(v:register)[0]."`]"

Это отображение позволяет выбрать вставленныйтекст сразу после его вставки.J в выбранном регионе объединяет все строки в регионе (кроме случаев, когда регион имеет только одну строку: здесь J действует как J без выделения, соединяя текущую строку со следующим).Подсказка gV также может использоваться для подстановки: "apgV:s/{pattern}/{replacement}<CR> удобнее, чем использовать "ap:let @a=substitute(@a, '{pattern}', '{replacement}', '{flags}'), если вы не определите какое-нибудь умное отображение.

Другой совет заключается в том, что регистр a можно очистить с помощью qaq последовательность в нормальном режиме: qa начинает запись нового макроса и q немедленно останавливает его, оставляя пустую строку в регистре a, в который записан макрос.

1 голос
/ 11 июля 2011

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

Накопить шаблон соответствуетодна строка в "a

    :g/pattern/ norm "apkJ"addu

или использование неназванного регистра

    :g/pattern/ norm pkJddu

Не удаляет новые строки в регистре, так как это не обязательно.

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

Цитировать:

   [ join lines ]
   JJJJJ

Вопрос, почему бы не использовать 5J или визуальный режимили :%j (объединяет все строки в файле)?

Не по теме:

    "How do you mark text between "" in code blocks,
    not to be colour coded?"
0 голосов
/ 03 июня 2011

Если я могу предположить, что ваш текстовый файл выглядит следующим образом:

Harvard Business School |Гарвардский колледж |Гарвардская школа богословия |

Я бы использовал

:%s/\n//g

для глобального поиска и замены всех \ n новых строк.иногда вам может понадобиться использовать ^ M (Ctrl + V и ENTER) вместо \ n.

Боюсь, ваш список может быть более сложным, чем этот, однако, в этом случае мое решение будет слишком «простым»

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