В Vim есть способ удалить без внесения текста в реестр?

for f in `find -depth`; do mv ${f} ${f,,} ; done

find -depth печатает каждый файл и каталог с содержимым каталога, напечатанным перед самим каталогом. ${f,,} уменьшает имя файла.

452
задан Cœur 1 July 2018 в 04:57
поделиться

14 ответов

Для удаления чего-то, не сохраняя его в регистре можно использовать "регистр черной дыры":

"_d

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

413
ответ дан ib. 1 July 2018 в 04:57
поделиться

Удаленный текст, в то время как в режиме вставки, не входит в регистр по умолчанию.

4
ответ дан 1 July 2018 в 04:57
поделиться

Ну, сначала сделайте эту команду:

:h d

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

7
ответ дан EBGreen 1 July 2018 в 04:57
поделиться

В версии для Windows (вероятно, в Linux также), можно дергать в систему, скопировать/вставить буферизуют использование "*y (т.е. предыдущий команда рывка с двойными кавычками и звездочкой).

можно тогда обычно удалять заменимые строки и вставлять скопированный текст с помощью "*p.

2
ответ дан JayG 1 July 2018 в 04:57
поделиться

Для 'слова замены', попробуйте cw в нормальном режиме.

Для 'абзаца замены', попробуйте cap в нормальном режиме.

10
ответ дан Swaroop C H 1 July 2018 в 04:57
поделиться

При использовании Vim тогда, у Вас будет визуальный режим, который похож на выбор, но с отделяющейся вещью режимов это - основание vi/vim.

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

Пример:

В текстовом файле с:

1| qwer
2| asdf
3| zxcv
4| poiu

со следующей последовательностью: ggVjyGVkp Вы закончите:

1| qwer
2| asdf
3| qewr
4| asdf

Объясненный:

  • gg: перейдите к первой строке
  • V: запустите визуальный режим с целых строк
  • j: спуститесь по одной строке (с выбором, запущенным на предыдущих строках, это выращивает выбор одна строка вниз)
  • y: дергайте к буферу по умолчанию (две выбранных строки, и он автоматически выходит из Вас от визуального режима)
  • G: перейдите к последней строке
  • V: запустите визуальный режим (то же как прежде)
  • k: поднимитесь одна строка (как прежде, с визуальным включенным режимом, это выращивает выбор, который каждый выстраивает в линию)
  • p: вставка (с выбором на двух последних строках, это заменит те строки, с чем существует в буфере - 2 первых строки в этом случае)

, Это имеет мало, неудобное, который помещает последний блок на буфер, таким образом, это не так или иначе желаемо для повторного приклеивания того же самого, таким образом, Вы захотите сохранить источник к именованному буферу с чем-то как [1 111] (к буферу, названному) и вставка с чем-то как [1 112] (но тогда если Вы запрограммируете, Вы, вероятно, не хотите вставлять несколько раз, но создавать функцию и называть ее, правильно? ПРАВО ?).

, Если Вы только используете vi, тогда необходимо будет использовать невидимые метки вместо этого визуальный режим, :he mark для больше на этом, я сожалею, но я не очень хорош с этой невидимой вещью меток, я довольно загрязнен визуальным режимом.

10
ответ дан maeghith 1 July 2018 в 04:57
поделиться

Для определенного примера, который Вы дали, если я понимаю вопрос тогда, это могло бы работать:

*Highlight what you want to put somewhere else
*delete (d)
*Highlight the code that you want it to replace
*paste (p)
23
ответ дан EBGreen 1 July 2018 в 04:57
поделиться

Да. Это является немного более замысловатым, чем удаление "старого" текста сначала, но:

я начинаюсь с..

line1
line2
line3
line4

old1
old2
old3
old4

я сдвиг + v выбирает line1, строка 2, 3 и 4, и удаляет их с командой

d Тогда, я удаляю старые 1-4 строки тот же путь.

Затем сделайте

"2p

, Это вставит предпоследние дергавшие строки (строка 1-4). "3p сделает третье последнее, и так далее..

, Таким образом, я заканчиваю с [1 111]

line1
line2
line3
line4

Ссылка: документация Vim относительно пронумерованного регистра

100
ответ дан Olivier Verdier 1 July 2018 в 04:57
поделиться

Документы VIM: Пронумерованный регистр 0 содержит текст от новой команды рывка, если команда не указала другой регистр с ["x].

, Например, мы дергаем "нечто" и удаляем "панель" - реестр 0 все еще содержит "нечто"! Следовательно "нечто" может быть вставлено с помощью "0p

72
ответ дан wisbucky 1 July 2018 в 14:57
поделиться
  • 1
    @Number47, почему это неправильно? Я не сказал " Все объявления объектов являются definitions" который Вы, кажется, предполагаете, что я имею. – Johannes Schaub - litb 23 March 2014 в 00:40

Для тех, кто использует JetBrans IDE (PhpStorm, WebStorm, ИДЕЯ IntelliJ) с IdeaVim. Можно испытывать проблемы с переотображением как nnoremap d "_d и использование его для удаления строки dd. Возможное решение для Вас: nnoremap dd "_dd

существуют проблемы о youtrack, голосуйте за них: https://youtrack.jetbrains.com/issue/VIM-1189 https://youtrack.jetbrains.com/issue/VIM-1363

1
ответ дан 22 November 2019 в 22:57
поделиться

Удобно иметь простое сопоставление, которое позволяет заменить текущий выбор с буфером.

Например, когда вы помещаете это в свой .vimrc

vmap r "_dP       // it's a capital 'p' on the end

, то после копирования чего-либо в регистр (то есть с помощью 'y') вы можете просто выбрать текст, который вы хотите заменить, и просто нажать 'r' на клавиатуре. Выбранный вариант будет заменен вашим текущим регистром.

Пояснение:

vmap - mapping for visual mode
"_d - delete current selection into "black hole register"
P - paste
52
ответ дан 22 November 2019 в 22:57
поделиться

Я поместил в свой vimrc следующее:

noremap  y "*y
noremap  Y "*Y
noremap  p "*p
noremap  P "*P
vnoremap y "*y
vnoremap Y "*Y
vnoremap p "*p
vnoremap P "*P

Теперь я возвращаюсь и вставляю из регистра буфера обмена, и мне не нужно беспокоиться о том, что происходит с регистром по умолчанию. Дополнительным преимуществом является то, что я могу вставлять данные из других приложений с минимальными трудностями. Я знаю, что теряю некоторую функциональность, но я все равно не могу отслеживать более одного регистра / буфера обмена.

35
ответ дан 22 November 2019 в 22:57
поделиться

Я часто делаю ошибку, следуя командам «y'ank, затем» _d'elete в черную дыру затем 'p'aste. Я предпочитаю' y'ank, затем удаляю, как мне нравится, затем '"0p' из регистра 0, куда помещается последний скопированный текст.

2
ответ дан 22 November 2019 в 22:57
поделиться

Чтобы подчеркнуть то, что EBGreen сказал :

Если вы вставляете при выделении текста, выделенный текст заменяется вставленным текстом .

Если вы хотите скопировать какой-то текст, а затем вставить его в несколько мест, используйте "0p для вставки. Пронумерованный регистр 0 содержит текст из самой последней команды восстановления.


Кроме того, вы можете перечислите содержимое всех ваших регистров:

:registers

Эта команда упрощает определение того, какой регистр вам нужен, когда вы выполняете что-то вроде ответа dbr . Вы также увидите регистры /,%, #. (См. Также : справочные регистры )


И, наконец, проверьте cW и cW , чтобы изменить слово, включая и не включая конечный пробел. (Использование заглавная W включает знаки препинания.)

16
ответ дан 22 November 2019 в 22:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: