Есть одна строка с 10000 символами, как я могу выбрать/заменить/удалить символы между 1234-м и 5678-м быстрыми? Лучше в Vim, но если emacs может это сделать, это тоже хорошо, спасибо.В Vim есть одна строка со 10000 символами, как я могу выбрать/заменить/удалить символы между 1234-м и 5678-м быстрыми?
ответ
С :substitute
:
Вы можете пропустить первые 1233 символов, а затем захватить 5678 - 1234 + 1 = 4445 символов, используя :help /\{
мульти, и :help /\zs
установить начало матча:
:substitute/^.\{1233}\zs.\{4445}/REPLACEMENT/
Нормальный режим
Перейти к первому символу (0
, 1233 вправо, а затем работать на следующий 4445 через 4445l
движения, например, удаление:. 01223ld4445l
.
Прямая адресация
Плохая вещь об обоих подходов является то, что вам нужно вычислить разницу (4445 в вашем примере). Вы можете сделать это в командной строке через регистр выражений (<C-r>=5678-1234+1<CR>
).
В качестве альтернативы, если нет двойной ширины или символов табуляции, столбец экрана может быть непосредственно рассмотрен через :help /\%v
регулярного атома экспрессии, или команда |
нормального режима:
:substitute/\%1234v.*\%5678v./REPLACEMENT/
или
1234|d5678|
В Emacs перейдите к строке и используйте move-to-column
(по умолчанию привязан к M-g TAB
). Используйте set-mark-command
(C-SPC
), чтобы активировать регион. M-g TAB 1234 RET C-SPC M-g TAB 5678 RET
выберет регион интереса. Затем вы можете использовать narrow-to-region
(C-x n n
), чтобы сузить буфер до выбранного региона. Сужение буфера позволяет редактировать суженную область, не затрагивая остальных. После редактирования вы можете расширить с помощью widen
(C-x n w
).
Команда 'go' | ': goto' также полезен. –
@ Meninx- メ ネ ン ッ ク ス: Ну, да, если длинная строка является первой, и если каждый символ представлен точно одним байтом. –