我覺得非常煩人的是,kill-word和forward-word將換行符視爲空格,例如把所有東西都殺了,直到下一行的單詞結尾。我希望它停止在該行的結尾處。kill-word/forward-word應該停在換行
我試圖修改語法表以包括新行字符到字定義如下:
(?修改 - 語法條目\ n「W」)
這給出了所希望的效果,但需要爲每個語法表單獨指定。
是否有辦法在全球範圍內實現這種效果?
我覺得非常煩人的是,kill-word和forward-word將換行符視爲空格,例如把所有東西都殺了,直到下一行的單詞結尾。我希望它停止在該行的結尾處。kill-word/forward-word應該停在換行
我試圖修改語法表以包括新行字符到字定義如下:
(?修改 - 語法條目\ n「W」)
這給出了所希望的效果,但需要爲每個語法表單獨指定。
是否有辦法在全球範圍內實現這種效果?
那麼,首先,我強烈建議習慣將大多數情況下將換行符視爲空白的想法。 Emacs通常會一直這樣做,試圖推翻這種趨勢可能是一場永無休止的戰鬥。
其次,我同意斯蒂芬給出的答案,即與語法表混淆,或者重新定義forward-word
本身,只會給你帶來麻煩和悲傷。
如果你真的想你描述M-d
和M-f
行爲,那麼也許這將是最好的定義一組新的具有此期望的行爲功能,並可以綁定的M-d
和M-f
鍵。
事實上,這將是改變任何emacs中某些核心功能默認行爲的傳統方式。
也許這樣? (勉強測試)
(defun forward-word-stop-eol (arg)
(interactive "p")
(let ((start (point)))
(save-restriction
(save-excursion
(move-end-of-line 1)
(narrow-to-region start (point)))
(forward-word arg))))
(defun kill-to-end-of-word-or-line (arg)
(interactive "p")
(kill-region (point) (progn (forward-word-stop-eol arg) (point))))
(global-set-key "\ef" forward-word-stop-eol)
(global-set-key "\ek" kill-to-end-of-word-or-line)
更改?\n
字符的語法會使您很快陷入各種模式。相反,您想要改變forward-word
這種交互式調用的方式(請注意,更改函數forward-word
的行爲也會導致麻煩,因爲它經常用於縮進代碼等內容)。你可能想看看subword-mode
是如何工作的一個例子,說明如何做到這一點。
我查了子詞模式的代碼,它也是一個偉大的信息來源。如果我決定採用更復雜的導航功能,我一定會使用子字詞作爲例子。 –
我用with-syntax-table
臨時(和全局)修改語法表。
例如,我用它與syntax-subword
模式:
(defadvice syntax-subword-forward (around testing activate)
(with-syntax-table (copy-syntax-table (syntax-table))
(modify-syntax-entry ?\n ">")
ad-do-it))
謝謝!這樣可行。我還沒有弄清楚導航代碼/文本的最有效方式是什麼,但這無疑提供了一個很好的起點。 –
這很不錯,我適應了bacwkard-will-word-stop-eol。如果再打一次,我只想刪除換行符。基本上是反向擊殺詞的行爲,但在換行符上設置「一站式」 – mtourne