一部の特殊なバッファには読み取り専用テキストが含まれており、これは変更できないため、キルすることもできません。キルコマンドは読み取り専用バッファにおいて特殊な動作をします。具体的には、テキスト上を移動してキルリングにコピーしますが、バッファから実際に削除することはありません。通常、このような場合にはビープ音が鳴り、エラーメッセージが表示されます。しかし、変数
kill-read-only-ok に nil
以外の値を設定すると、テキストが消去されなかった理由を説明するメッセージがエコー領域に出力されるだけになります。
キルをキルリングに保存する前に、kill-transform-function
を使って文字列を変換できます。この関数はキル対象の文字列を引数として呼び出され、保存したい文字列を返す必要があります。また、nil
を返すこともでき、その場合は文字列はキルリングに保存されません。例えば、純空白文字列を絶対にキルリングに保存したくない場合は、次のように記述できます:
(setq kill-transform-function
(lambda (string)
(and (not (string-blank-p string))
string)))
変数 kill-do-not-save-duplicates を nil 以外の値に変更すると、それ以降の同一キルは重複せず、単一のキルリングエントリとして記録されます。
マイナーモード kill-ring-deindent-mode
を有効にすると、キルリングに保存されるテキストのインデントが、最初に保存された行のインデント量分だけ減少します。つまり、保存されたテキストの1行目が
n 列分インデントされていた場合、このモードでは保存される各行のインデントからその列数分が差し引かれます。