2016-12-23 7 views
0

Есть одна строка с 10000 символами, как я могу выбрать/заменить/удалить символы между 1234-м и 5678-м быстрыми? Лучше в Vim, но если emacs может это сделать, это тоже хорошо, спасибо.В Vim есть одна строка со 10000 символами, как я могу выбрать/заменить/удалить символы между 1234-м и 5678-м быстрыми?

ответ

4

С :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| 
+0

Команда 'go' | ': goto' также полезен. –

+0

@ Meninx- メ ネ ン ッ ク ス: Ну, да, если длинная строка является первой, и если каждый символ представлен точно одним байтом. –

0

В 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).