Ответ 1
Что я буду делать:
-
aG
-
Y
-
xG
-
Vp
Вам не нужно покидать обычный режим, но он дергает линию. Тем не менее, вы можете использовать V"0p
, который всегда будет помещать линию, затянутую на шаге 2.
Не реже одного раза в день у меня следующая ситуация:
A: This line should also replace line X
...
X: This is line should be replaced
Я считаю, что я не выполняю эту задачу эффективно.
Что я делаю:
Это имеет дополнительный недостаток, что строка X теперь находится в регистре по умолчанию, что вызывает раздражение, если я нахожу другую строку, которую следует заменить A. Янкинг и вставка из дополнительного регистра ("ayy, " aP) делает эту простую задачу еще менее эффективной.
Мои вопросы:
Что я буду делать:
aG
Y
xG
Vp
Вам не нужно покидать обычный режим, но он дергает линию. Тем не менее, вы можете использовать V"0p
, который всегда будет помещать линию, затянутую на шаге 2.
Vp
: выберите строку, вставьте то, что было дернуто
Это имеет дополнительный недостаток что строка X теперь находится в режиме по умолчанию зарегистрируйтесь, что раздражает, если я нахожу другую линию, которую нужно заменить с А.
Чтобы удалить текст без влияния на обычные регистры, вы можете использовать регистр черных дыр "_
:
"_dd
Я бы использовал режим командной строки (Ex) и выполнил следующие две команды
:XmA
:Ad
Это просто перемещает строку X только под A, а затем удаляет A, которые выстраиваются в линию
Например
:7m3
:3d
Переместиться в начало первой строки.
y, $ - скопируйте строку без окончания строки в конце
Переместитесь в начало целевой линии.
V, p - заменить только одну целевую строку
c, c, Ctrl r, 0, Esc - заменить целевую строку на исходный yank
Переход к началу следующей целевой линии.
. - повторяет команду, выпущенную в 4.2.
Примечания:
4.1 - y, $, потому что если вы выполняете y, y или y, вы скопируете строку, а Ctrl r, 0 фактически добавляет linebreak ниже вашей целевой линии.
4.2 заменяет V p, который не работает с повторением, потому что технически последнее действие удаляется, поэтому . просто удалит строку.
Если кто-то знает, как выпустить "заменить текущую строку на регистр из режима EX (командной строки), я хотел бы услышать от вас (и знать, где вы нашли документацию). Может быть повторяемая команда EX, которая быстрее, чем 4.2, и/или не имеет очертания строки.
Вы можете использовать это с визуальным режимом.
A
GX
GВот что я буду делать
Вы можете использовать эти команды в обычном режиме:
:AmX | Xd
команда m
предназначена для m[ove]
, которая перемещает номер строки A после номера строки X, если вы хотите скопировать вместо перемещения строки, используйте co[py]
. команда d
предназначена для d[elete]
.
Вы можете перемещать (копировать с помощью co
) диапазон строк, используя
:start,end m X
Основываясь на ответах, которые предлагают использовать Vp
или Vp
для вставки над строкой - чтобы избежать изменения содержимого регистра yank, я считаю, что самая эргономичная команда просто:
VPY
Мне часто приходится использовать одну строку и заменять ее в нескольких местах, каждая из которых имеет другое значение (что означает, что я не могу делать регулярное выражение).
Y, чтобы вынуть желаемую исходную строку
а затем на каждой строке, которую вы хотите заменить, V p zero Y
Мне легче использовать команду Ex для этого; ех. для перемещения линии с 9 по 46:
:46|9m.|-1d
Это переместит курсор в строку 46, переместит строку 9 ниже текущей, затем удалите предыдущую строку (поскольку перемещенная строка является текущей).
Или используя метки (метки), используя знак 'a':
:46ma a|9m'a|'ad
я просто использовал бы регистр "Черная дыра":
Дано:
nnoremap < C-d > "_dd
решение будет:
< C-d > yy