Работа с буферами 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()
, что также может изменить значение регистра. проверьте его справочный документ, если вы хотите его использовать.