Emacs優(yōu)化backward-kill-word函數

為什么要改進?

原生的backward-kill-word函數對母語為非英文的文本處理不是很友善,同時如果backward-word中出現空格或換行符時處理得也不好。

改進點

下面對其進行改進,定制自己的backward-kill-word函數。改進點如下:

  1. 如果光標前一個word為中文,只刪除前一個中文字;
  2. 如果光標前一個word全為英文,且backward-word中含有空格,則只刪除到空格處;
  3. 如果光標前一個word全為英文,且backward-word中含有換行符,則只刪除到換行符處。

代碼

(defun aborn/backward-kill-word ()
  "Customize/Smart backward-kill-word."
  (interactive)
  (let* ((cp (point))
         (backword)
         (end)
         (space-pos)
         (backword-char (if (bobp)
                            ""           ;; cursor in begin of buffer
                          (buffer-substring cp (- cp 1)))))
    (if (equal (length backword-char) (string-width backword-char))
        (progn
          (save-excursion
            (setq backword (buffer-substring (point) (progn (forward-word -1) (point)))))
          (setq ab/debug backword)
          (save-excursion
            (when (and backword          ;; when backword contains space
                       (s-contains? " " backword))
              (setq space-pos (ignore-errors (search-backward " ")))))
          (save-excursion
            (let* ((pos (ignore-errors (search-backward-regexp "\n")))
                   (substr (when pos (buffer-substring pos cp))))
              (when (or (and substr (s-blank? (s-trim substr)))
                        (s-contains? "\n" backword))
                (setq end pos))))
          (if end
              (kill-region cp end)
            (if space-pos
                (kill-region cp space-pos)
              (backward-kill-word 1))))
      (kill-region cp (- cp 1)))         ;; word is non-english word
    ))

綁定快捷鍵

(global-set-key [C-backspace] 'aborn/backward-kill-word)
改進后的效果.gif
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,603評論 9 468
  • 1. 問:WORD 里邊怎樣設置每頁不同的頁眉?如何使不同的章節(jié)顯示的頁眉不同? 答:分節(jié),每節(jié)可以設置不同的頁眉...
    花開易見落難尋閱讀 2,370評論 2 37
  • 1. 問:WORD 里邊怎樣設置每頁不同的頁眉?如何使不同的章節(jié)顯示的頁眉不同? 答:分節(jié),每節(jié)可以設置不同的頁眉...
    Irinaa閱讀 2,943評論 0 43
  • 1. Vim的幾種模式 正常模式:可以使用快捷鍵命令,或按:輸入命令行。 插入模式:可以輸入文本,在正常模式下,按...
    紅線路亞灣閱讀 17,794評論 0 1
  • Vim幾句話介紹Vim是Unix系統(tǒng)上的文本編輯軟件(你該不會不知道什么是文本編輯軟件吧!),在windows上也...
    何必遠方閱讀 3,315評論 0 3

友情鏈接更多精彩內容