Работа с буферами vi

Итак, я изучаю vim/vi/ex, и я подумал, что довольно хорошо разбираюсь в буферной системе. (есть специальный буфер, и вы также можете называть буферы). Я знаю, что всякий раз, когда вы используете yank, изменяете или удаляете, содержимое буфера общего назначения перезаписывается.

Однако мне дали задание использовать команду vi / ex для удаления последних 2 строк буфера, и я в тупике. Похоже, я не могу найти ответ, просматривая форумы или Интернет в целом, поэтому я подумал, что я бы попросил гуру межсетей помочь мне здесь.

Есть ли способ напрямую изменить содержимое буфера, или ответ просто вставить буфер, удалить последние 2 строки и затем восстановить его снова?

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Я хотел бы отредактировать этот вопрос, чтобы включить вопрос: в чем разница между буфером и регистром?

Сначала я думал, что это по сути одно и то же, но с тех пор научился иначе.

Мое новое понимание состоит в том, что вещи, которые я ранее называл буферами, на самом деле являются регистрами, что имеет больше смысла в соответствии с моими знаниями о компьютерах.

Теперь я считаю, что буфер - это просто текущая копия текста, который вы изменяете. Или, точнее, область основной памяти, в которой вы манипулируете данными. (Таким образом, ответ на мой вопрос будет на самом деле просто:$-1,$d)

Однако на этих форумах я столкнулся с противоречивой информацией, которая говорит об обратном, называя "регистры" "буферами".

Если бы кто-то мог это прояснить, я был бы очень благодарен.

РЕДАКТИРОВАТЬ: vim help получил все ответы, которые мне были нужны, хотя я не могу удалить сообщение. Следует отметить, что существует множество ответов на вопросы как на этом сайте, так и на многих других, которые высоко оценены, но неправильно называют регистры буферами.

3 ответа

Решение

Я начал писать длинный ответ, но в итоге решил отказаться от него и дать ответ, которого вы заслуживаете:

:help buffers
:help registers

Как вставить буфер, удалить последние 2 строки, а затем снова восстановить его?

Секрет заключается в использовании использовать '' а также `]Метки.

p`]dky''

Для получения дополнительной помощи см.:

:h ''
:h `[

Прежде всего, после прочтения вашего вопроса, я почти уверен, что то, что вы говорили о "буферах", на самом деле является "регистрами". Разницу между буфером и регистром вы можете найти в справке vim. (На самом деле две вещи совершенно разные концепции)

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

Это не правда, вы можете append контент для регистрации, если вы используете A-Z регистр.

Есть ли способ напрямую изменить содержимое буфера (регистра)... удалить последние 2 строки, а затем восстановить его снова?

Да, есть способы. Вы можете получить доступ и изменить содержимое реестра, @x, Вы можете изменить содержание просто let @a='newValue',

с вашим примером, если вы хотите удалить последние две строки:

:let @a=join(split(@a,'\n')[0:-3],"\n")."\n"

тогда вы можете сделать "ap вставить измененный контент из реестра a,

Есть встроенная функция setreg(), что также может изменить значение регистра. проверьте его справочный документ, если вы хотите его использовать.

Другие вопросы по тегам