しょぼしょぼすくりぷと xyzzy > lisp サンプルLibrary集 > 削除系 lisp ライブラリ

xyzzy 削除系 lisp

buffer & file 系 lispライブラリの方にも削除関係があるよ。

目次

Kill Line

行頭にあると改行を含めた行全体をkillをする。 それ以外は標準の Kill-Lineと同じ処理をする。

(defun kill-line-CR (&optional lines)
  (interactive "*p")
  (kill-region (point)
	(progn
	  (cond ((null lines)
		 (cond ((eolp) (forward-line 1))
		       ((bolp) (goto-eol)(forward-char))
		       (t (goto-eol))))
		((zerop lines) (if(bolp)(forward-line -1)(goto-bol)))
		(t (forward-line lines)))
	  (point)
	)
  ))

グローバルキーを置き換える。
(global-set-key #\C-k 'kill-line-CR)


kill-word

の動きがこまいので スペース(non word)を巻き込まないようにしたつもり。(動きすぎだったのを減らした。) (moveはこっち)(01/20/2002)
(defun delete-groups-forward (&optional num)
  (interactive "*p")
  (if (not num)
	  (setq num 1))
  (delete-groups num t))

(defun delete-groups-backword (&optional num)
  (interactive "*p")
  (if (not num)
	  (setq num 1))
  (delete-groups num nil))

(defun delete-groups (num foward-flag)
  (let (
		(delete-kanji-list
		 '("w_" "j" "k" " "  "." ")" "(" "x" "\\" "^.jkw x\\()")
		)
	   )
	(dotimes (j num)
	  (catch 'over
		(dolist (i delete-kanji-list)
		  (if foward-flag
			  (delete-kanji-group i 'skip-syntax-spec-forward)
			(delete-kanji-group i 'skip-syntax-spec-backward)))
	  )
	)
  ))

漢字とか気にしないように
(defun delete-kanji-group (i func)
  (let ((now-point (point))(last-point (point)))
	(funcall func i)
	(unless (= (point) now-point)
	  (delete-region now-point (point))
	  (throw 'over nil))))


;_-+=*&^%$$#<><.,.,.,.    ()_)_)_)_)_jfkajkdjf(	    (感じカタカナひらがな一寿黒→矢印(


(global-set-key #\M-h 'delete-groups-backword)
(global-set-key #\M-d 'delete-groups-forward)

空白除去

カーソル付近の " " タブ 全角スペース (SJIS)を消去するものです。 一文字ずらさなきゃいけないと思ったが大丈夫だった。
(defun delete-horizontal-blanks ()
  (let ((st -1) (ed -1))
    (if (skip-chars-backward " \t ")
	(setq st (point)))
    (if (skip-chars-forward " \t ") (setq ed (point)) (setq ed st))

      (if (or (= st 0) (= st ed))
	  nil
	  (delete-region st ed))
  ))

おそらく、ESC \(delete-horizontal-spaces)が同じ操作です

行頭で行末で

以下で、共通の関数、" (execute-each-region)関数"を使います。

指定回数回,行の先頭のキャラクターを消す

3と入れたら 行頭3文字消す。ただし 、それより短かったら改行など消さない。 最後のほうがちょっと違うだけ
(defun delete-bol-region (from to)
  (interactive "*r")
  "行の先頭の入力された数だけ文字を削除"
  (setq num (read-integer "How many chars delete?: "))
  (execute-each-region
   #'(lambda ()
	   (delete-char (min num (lineLength)))
	 )
   from to)
  t)

isNullLine lineLength 関数はこちらを参照してください。
(先頭に挿入はこっち)


文字の先頭の一致する文字を消す

コメントを消すのに便利 (先頭に挿入はこっち)
(defun delete-word-bol-region (from to)
  (interactive "*r")
  "行の先頭の一致する文字を削除"
  (let (st stl)
	(setq st
		  (read-string "What word will you delete in head?:" :default "#"))
	(setq stl (length st))
	(execute-each-region
	 #'(lambda()
		 (if (and (not(isNullLine?))
				 (<= stl (lineLength))
				 (string-match (buffer-substring (point) (+ (point) stl)) st))
		  (delete-char stl)
		)
	   )
	 from to))t)


Region で 行末の ブランク系をまとめて削除

大して効果はないが、スペースやタブだけの行を空行にしたり、後ろの無駄なブランクを消す。
(defun delete-eol-space-region (from to)
  (interactive "*r")
  "行の最後のスペースを消す"
  (execute-each-region
   #'(lambda ()
	   (goto-eol)
	   (delete-horizontal-blanks))
   from to)
  t)

;バッファー全体に
(defun delete-eol-space-buffer (&optional buf)
  (interactive)
  (when buf
	 (select-buffer buf))
  (let ((usr-point (point)) )
	 (delete-eol-space-region (point-min)(point-max))))
delete-horizontal-blanks関数は上を参照してください。

しょぼしょぼすくりぷと xyzzy編 トップへ | lisp サンプルLibrary集