33.7 Команды удаления на уровне пользователя

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

Команда: delete-horizontal-space &optional backward-only

Эта функция удаляет все пробелы и табуляции вокруг точки. Она возвращает nil.

Если backward-only не равно nil, функция удаляет пробелы и табуляции перед точкой, но не после нее.

В следующих примерах мы вызываем delete-horizontal-space четыре раза, по одному разу в каждой строке, при этом точка находится между вторым и третьим символами в строке каждый раз.

---------- Буфер: foo ----------
I ∗thought
I ∗     thought
We∗ thought
Yo∗u thought
---------- Буфер: foo ----------

(delete-horizontal-space)   ; Четыре раза.
     ⇒ nil

---------- Буфер: foo ----------
Ithought
Ithought
Wethought
You thought
---------- Буфер: foo ----------
Команда: delete-indentation &optional join-following-p beg end

Эта функция объединяет строку, на которой находится точка, с предыдущей строкой, удаляя любой пробельный символ в месте соединения и в некоторых случаях заменяя его одним пробелом. Если join-following-p не равно nil, delete-indentation объединяет эту строку со следующей строкой. В противном случае, если beg и end не равны nil, эта функция объединяет все строки в выделенном регистре.

При интерактивном вызове join-following-p является префиментным аргументом, а beg и end — соответственно, началом и концом регистра, если он активен, иначе nil. Функция возвращает nil.

Если есть префикс заполнения, и вторая из объединяемых строк начинается с этого префикса, то delete-indentation удаляет префикс заполнения перед объединением строк. См. Margins for Filling.

В приведенном ниже примере точка находится в строке, начинающейся со слова ‘events’, и не имеет значения, есть ли в предыдущей строке пробелы в конце.

---------- Буфер: foo ----------
When in the course of human
∗    events, it becomes necessary
---------- Буфер: foo ----------

(delete-indentation)
     ⇒ nil

---------- Буфер: foo ----------
When in the course of human∗ events, it becomes necessary
---------- Буфер: foo ----------

После объединения строк функция fixup-whitespace отвечает за определение того, следует ли оставлять пробел в месте соединения.

Команда: fixup-whitespace

Эта функция заменяет все горизонтальные пробельные символы вокруг точки либо одним пробелом, либо отсутствием пробела, в зависимости от контекста. Она возвращает nil.

В начале или в конце строки соответствующее количество пробелов равно нулю. Перед символом с синтаксисом закрывающей скобки или после символа с открывающей скобкой или синтаксисом префикса выражения также не подходит пробел. В противном случае подходит один пробел. См. Table of Syntax Classes.

В приведенном ниже примере fixup-whitespace вызывается в первый раз с точкой перед словом ‘spaces’ в первой строке. Для второго вызова точка находится непосредственно после ‘(’.

---------- Буфер: foo ----------
This has too many     ∗spaces
This has too many spaces at the start of (∗   this list)
---------- Буфер: foo ----------

(fixup-whitespace)
     ⇒ nil
(fixup-whitespace)
     ⇒ nil

---------- Буфер: foo ----------
This has too many spaces
This has too many spaces at the start of (this list)
---------- Буфер: foo ----------
Команда: just-one-space &optional n

Эта команда заменяет любые пробелы и табуляции вокруг точки одним пробелом или n пробелами, если указано n. Она возвращает nil.

Команда: delete-blank-lines

Эта функция удаляет пустые строки вокруг точки. Если точка находится в пустой строке с одной или более пустыми строками до или после нее, то удаляются все, кроме одной. Если точка находится в изолированной пустой строке, она удаляется. Если точка находится в непустой строке, команда удаляет все пустые строки, следующие за ней.

Пустая строка определяется как строка, содержащая только табуляции и пробелы.

delete-blank-lines возвращает nil.

Команда: delete-trailing-whitespace &optional start end

Удаляет пробельные символы в конце регистра, определенного start и end.

Эта команда удаляет пробельные символы после последнего не-пробельного символа в каждой строке в регистре.

Если эта команда применяется ко всему буферу (т.е. вызывается интерактивно с неактивным маркером или вызывается из Lisp с end nil), она также удаляет все конечные строки в конце буфера, если переменная delete-trailing-lines не равна nil.