學習Emacs系列教程(五) 編輯(2) 標記

2022-03-16 05:20:53 字數 2843 閱讀 8055

學習emacs系列教程(三):編輯(1)

有段時間沒寫這個教程了,自己險些放棄,不過回頭想想看個**都討厭太監,自己寫更不能太監,還是要堅持下去。閒話不多說,進入這次的正題,關於編輯文字的另一些內容。

一、標記和區域

所謂區域(region)就是平時我們使用滑鼠選中的一段文字,在emacs中用樣可以使用滑鼠來選擇一段文字表示區域,如果使用鍵盤操作的話需要用乙個術語叫標記(mark),也就是乙個基準點,或者說是區域的起點,使用命令c-spc

用來設定標記,不幸的是這個組合鍵通常情況是被輸入法給截獲了,我們得使用c-@來代替,要多按個shift,操作起來感覺有點彆扭。ok,在設定好標記後我們可以讓游標移動到任何想去的地方,在游標和標記之間就是選定的區域,emacs裡面會高亮顯示這個區域,參見下圖,注意,這個區域是動態存在的,只要游標位置變了,區域也隨著變化,只是其起點永遠是那個標記。

這個時候就可以對選中的區域進行操作了,比如說c-w (kill-region) 刪除選中的區域,或者c-x c-u 將所選區域字母改成大寫字母,這是個禁用命令需要確認後才能生效。還有個常用的操作是c-x c-x (exchange-point-and-mark),交換游標和標記,就是說把區域的起點改在游標所在處。取消標記和區域直接使用c-g 就可以了。

除了這種手工選擇區域之外,emacs還內建了一些快捷的選取方式。像常用的全選就是c-x h ,全選後標記在文件的最後,而游標在文件的最前面。c-x c-p 選擇整頁,頁是由分頁符界定的。選取一段使用m-h 。m-@ 從當前位置選到單詞尾(中文裡的單詞是兩個標點符號間的文字),重複按這個命令會一直往後選取單詞。這四個命令有個共同的特點就是選取的區域標記在最後,游標在最前,這個和常規理解有些區別,記住就是了。

在emacs 23之後還有個新特性叫shift選擇(shift selection),故名思意就是用shift鍵來快速選擇區域,通過使用shift鍵和c-n, c-p之類的組合來選擇區域,和常規選擇有些區別的是,在shift選擇過程中使用了任何非shift組合都會取消當前選擇區域。

二、標記環

標記的乙個主要功能是界定區域,此外還有個作用就是記憶乙個點供今後使用,在乙個buffer裡面可以用標記記憶16個點,稱為「標記環」,標記環實際是個先進先出的佇列。

我們使用命令c-@ c-@ 把乙個標記加入標記環,這個命令做了兩件事,第一次按c-@時標記了乙個點(此時已經加入標記環了),第二次按c-@時取消了當前標記的啟用狀態,我們可以在minibuffer中看到提示mark deactivated。而命令c-u c-@ 來選擇上乙個加入標記環的標記,如果選中的標記處於啟用狀態,它會取消其啟用。使用c-u c-@不會刪除標記,僅是在標記環中不停的向前跳躍,注意這裡我們只可能在當前buffer中的標記間跳躍,不會跑到其它的buffer裡面去。

如果修改變數set-mark-command-repeat-pop 為 non-nil,在按下c-u c-@後,我們可以就使用c-@在標記環中跳躍了。

變數mark-ring-max 表示了乙個buffer中標記環中的最大標記數,預設為16。

還有變數mark-even-if-nonactive 和標記環相關,當其為nil 時,表示只能使用啟用狀態的標記,預設為non-nil 。

另外在emacs中還存在乙個全域性標記環,c-@ c-@在把標記加入當前buffer標記環同時,也把標記加入了全域性標記環,我們可以用命令c-x c-@ (pop-global-mark)在全域性標記環中選擇。

三、非永續性標記模式

這個東西這裡只是稍微提及一下,平時用到的地方很少,所謂非永續性標記就是指我們在選擇了乙個區域後,任何修改該區域的操作都會改變區域的啟用狀態。而我們可以將非永續性標記模式關閉,這樣選擇的區域永遠處於啟用狀態,命令是transient-mark-mode ,這是個切換變數只有開啟和關閉兩個狀態,我們每次使用m-x transient-mark-mode命令都會將其值從乙個切換到另乙個。關閉該模式後最顯著的特點是選擇區域時沒有高亮(不過使用滑鼠選擇和shift選擇高亮還是有的)。令人頭疼的也是這個特點,我們根本不知道自己選擇了哪些地方。

我們會使用這個東西只有一種情況,某些命令在關閉非永續性標記模式時,其作用有少許差異,不過基本上這些差異很少去關注,所以這段大家看看就行。

小結:按鍵

命令 作用

c-@set-mark-command

設定標記

c-x c-x

exchange-point-and-mark

交換標記和游標位置

c-wkill-region

刪除區域中內容

c-x c-u

upcase-region

將區域中字母改為大寫

c-x h

mark-whole-buffer

全選 c-x c-p

mark-page

選取一頁

m-hmark-paragraph

選取一段

m-@mark-word

選取乙個單詞

c-@ c-@

加入點到標記環

c-u c-@

在標記環中跳躍

c-x c-@

pop-global-mark

在全域性標記環中跳躍

(none)

transient-mark-mode

非持久化標記模式

變數 作用

set-mark-command-repeat-pop

是否使用c-@連續跳躍

mark-ring-max

標記環最大容量

mark-even-if-nonactive

是否只使用啟用狀態標記

未完待續。。。

ps: 久了沒寫感覺生疏了,大家見諒。

學習Emacs系列教程(二) 導航

學習emacs系列教程 二 導航 學習emacs系列教程 一 基本使用 href 學習emacs系列教程 一 基本使用 上回開了個頭,簡單的介紹了emacs的一些基本常識,這回繼續說基本常識,怎麼移動你的游標。可能有人會說,這上下左右鍵不是很好用嗎,還用你來講。呶,emacs的強大在於你能夠只使用鍵...

學習Emacs系列教程(二) 導航

上回開了個頭,簡單的介紹了emacs的一些基本常識,這回繼續說基本常識,怎麼移動你的游標。可能有人會說,這上下左右鍵不是很好用嗎,還用你來講。呶,emacs的強大在於你能夠只使用鍵盤左邊那堆鍵來完成任何事情 不包括頂上的esc和function 這也是emacs的設計宗旨。為了試驗這些按鍵,大家在進...

學習Emacs系列教程(九) 緩衝管理

首先提及一點,這裡的緩衝就是emacs中的buffer。鬧,所謂的緩衝就是當前你正在編輯的東東。比如,你開啟乙個檔案emacs會建立乙個緩衝來裝載這個檔案,當你呼叫幫助時emacs會建立乙個叫 help 的緩衝來顯示幫助內容,開啟tutorial則會出現tutorial.cn這個緩衝。本質上來說緩衝...