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

為什么要改進(jìn)?

原生的backward-kill-word函數(shù)對(duì)母語(yǔ)為非英文的文本處理不是很友善,同時(shí)如果backward-word中出現(xiàn)空格或換行符時(shí)處理得也不好。

改進(jìn)點(diǎn)

下面對(duì)其進(jìn)行改進(jìn),定制自己的backward-kill-word函數(shù)。改進(jìn)點(diǎn)如下:

  1. 如果光標(biāo)前一個(gè)word為中文,只刪除前一個(gè)中文字;
  2. 如果光標(biāo)前一個(gè)word全為英文,且backward-word中含有空格,則只刪除到空格處;
  3. 如果光標(biāo)前一個(gè)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)
改進(jìn)后的效果.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容