LINUX.ORG.RU

vim

 , ,


0

2

Как из именного буфера удалить несколько строк? Например:
Имеется текст, состоящий из 10+ строк, делаю

"t4yy
4 строки заносятся в буфер, затем делаю
"t2dd
, но из буфера строки не удаляются (т.е. сделав
"tp
вставляются 4 строки, а не две и при вводе
"t2dd
удаляются строки не из буфера а из текста, начиная с курсора). В чём проблема?
ОС - Ubuntu 14.04 LTS
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 2 2014 19:39:32)


Во-первых, это называется регистры (registers), а не буферы (buffers), откуда и пошла команда :registers .

Во-вторых, насколько я знаю, так, как ты хочешь их редактировать — это делать нельзя, пусть профессионалы вима меня поправят, если это не так.

Самый простой способ — переделать регистр спастив, отредактировав и засунув его обратно.

Но я больше предпочитаю непосредственное редактирование, в твоём случае это:

:let @t='<C-r><C-r>t
т.е. вводится :let @t=' и нажимается два раза <C-r> и имя именованного регистра; и он покажет всё его содержимое, отредактировав которое, нужно закрыть закрывающей кавычкой ' и нажав Enter.

redhat
()

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

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

bj
()
Ответ на: комментарий от redhat

Я, наверно, чего-то не понимаю.

В книжке «Learning the vi and Vim Editors, 7th ed.» под авторством Arnold Robbins и Elbert Hannah есть 4-ая глава, а в ней раздел: «Yanking to Named Buffers» и в нём написано:

To yank into a named buffer, precede the yank command with a double quote (") and the character for the name of the buffer you want to load. For example:
«dyy Yank current line into buffer d.
„a7yy Yank next seven lines into buffer a.
After loading the named buffers and moving to the new position, use por Pto put the text back:
„dP Put the contents of buffer dbefore cursor.
„ap Put the contents of buffer aafter cursor.
There is no way to put part of a buffer into the text—it is all or nothing. In the next chapter, you’ll learn how to edit multiple files. Once you know how to travel between files without leaving vi, you can use named buffers to selectively transfer text between files. When using the multiple-window feature of the various clones, you can also use the unnamed buffer to transfer data between files.
You can also delete text into named buffers using much the same procedure:
„a5dd Delete five lines into buffer a.


Собственно интересует, что именно из вышесказанного неверно и по какой книжку лучше изучать vi/vim
P.S. 4-ая глава относилась к vi. В vi я пытался проделать аналогичные действия(которые указаны в первом сообщении), результат тот же.

zarat
() автор топика
Ответ на: Я, наверно, чего-то не понимаю. от zarat

You can also delete text into named buffers using much the same procedure: „a5dd Delete five lines into buffer a.

Заметь разницу — «into», а не «in». А вообще авторы мудаки, регистры называть буферами, а буферы файлами. Советую все таки почитать «Practical Vim», а не это непотребство.

bj
()
Ответ на: Я, наверно, чего-то не понимаю. от zarat

что именно из вышесказанного неверно

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

«a5dd Delete five lines into buffer a.
You can also delete text into named buffers using much the same procedure:
into

Он говорит, что можно удалить в регистр, а не из него.

Справка:

:help "
							*quote*
"{a-zA-Z0-9.%#:-"}	Use register {a-zA-Z0-9.%#:-"} for next delete, yank
			or put (use uppercase character to append with
			delete and yank) ({.%#:} only work with put).

							*:reg* *:registers*
:reg[isters]		Display the contents of all numbered and named
			registers.  If a register is written to for |:redir|
			it will not be listed.
			{not in Vi}


:reg[isters] {arg}	Display the contents of the numbered and named
			registers that are mentioned in {arg}.  For example: >
				:dis 1a
<			to display registers '1' and 'a'.  Spaces are allowed
			in {arg}.  {not in Vi}
Как видно из справки, это регистры, буферы недвусмысленно означают совсем другое.

Learning the vi and Vim Editors, 7th ed

Отложи в сторону, неинтересная и неполезная книжка.

по какой книжку лучше изучать vi/vim

Однозначно «Practical Vim» Дрю Нила, там еще Тим Поп кое-что чирканул.

redhat
()

А вообще, если ты только изучаешь вим, на тебе сдалась такая редкоиспользуемая херня как редактирование регистров? На практике это нужно раз в полгода или того реже, в отличие от редактирования макросов, которое нужно почаще, чтобы не перезаписывать длинные макросы заново, когда нужно исправить один-два символа.

redhat
()
Ответ на: комментарий от redhat

Всем спасибо за разъяснения и советы. Продолжу изучать vim по книжке «Practical Vim».

Ну и если vim вдруг понравится, то далее http://learnvimscriptthehardway.stevelosh.com/ ))

Уже понравился, надеюсь, скоро доберусь и до такого уровня.

на тебе сдалась такая редкоиспользуемая херня как редактирование регистров?

Я просто изучал vi/vim по книжке и каждый пример на практике рассматривал. Хорошо, что мой английский далёк от идеала, иначе бы не запнулся на том моменте и не нашёл куда более полезную книжку.

zarat
() автор топика
Ответ на: комментарий от pon4ik

Можно, но не нужно, потому что разница есть:

CTRL-R CTRL-R {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A}

		Insert register or object under the cursor.  Works like
		|c_CTRL-R| but inserts the text literally.  For example, if
		register a contains "xy^Hz" (where ^H is a backspace),
		"CTRL-R a" will insert "xz" while "CTRL-R CTRL-R a" will
		insert "xy^Hz".

redhat
()

Ну кто читает книги для обучения? 21-й век на дворе. Вот.

ashot ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.