Sunday, June 13, 2010

[教學] 在 Mac OS X 中編輯文件時好用的快速鍵

作者: Neisseria (Neisseria) 站內: MAC
標題: [教學] 在 Mac OS X 中編輯文件時好用的快速鍵
時間: Sun Jun 13 17:05:23 2010

自己無意間發現原來 OS X 裡有幾個 emacs 風格的快速鍵,後來在一些
國外的部落格看到可以藉著簡單的設定檔來擴充快速鍵,但國內較少看到
此類文章,故分享之。

圖文版請看
http://mimi-repo.blogspot.com/2010/06/mac.html


========================= 本文開始 =============================
在用 Macbook 做文字編輯時,因為筆電鍵盤上沒有 HOME、END、PageUp、PageDn
等好用按鍵,所以在文件裡要移動游標時,就只能靠方向鍵來逐字移動,感覺非常冏。
其實,OS X 上有更便捷的方法。

mac 的文字編輯軟體有內建 emacs 風格的快捷鍵,但很多功能預設未啟動。如果要
啟動,則要修改或創造 $HOME/Library/KeyBindings/DefaultKeyBinding.dict 檔案,
記得要將該檔案存為純文字檔。

推薦使用 nano 或者是 vim 等終端機底下的文字編輯軟體,即會以純文字檔來儲存。
$ mkdir ~/Library/KeyBindings
$ nano ~/Library/KeyBindings/DefaultKeyBinding.dict

或是用 mac 的文字編輯(TextEdit),但是要選擇「製作純文字格式」。

在 DefaultKeyBinding.dict 文件中,^ 代表 control 鍵,在文件中為 C;
~ 代表 option 鍵,在文件中為 M。另外要注意文件中的 :(冒號)和
;(分號)都是不可省略的。

{
"~f"="moveWordForward:"; /* M-f */
"~b"="moveWordBackward:"; /* M-b */
"~v"="pageUp:"; /* M-v */
"^v"="pageDown:"; /* C-v */
"~<"="moveToBeginningOfDocument:"; /* M-< */
"~>"="moveToEndOfDocument:"; /* M-> */

"~d"="deleteWordForward:"; /* M-d */
"~^h"="deleteWordBackward:"; /* C-M-h */
"^k"="deleteToEndOfLine:"; /* C-k */
"^u"="deleteToBeginningOfLine:"; /* C-u */

"^y"="yank:"; /* C-y */
"^j"="insertNewline:"; /* C-j */

"^/"="undo:"; /* C-/ */
"^_"="undo:"; /* C-_ */
"^g"="cancelOperation:"; /* C-g */

"~c"="capitalizeWord:"; /* M-c */
"~u"="uppercaseWord:"; /* M-u */
"~l"="lowercaseWord:"; /* M-l */
"^t"="transpose:"; /* C-t */
"~t"="transposeWord:"; /* M-t */
"~/"="complete:"; /* M-/ */

/* mark point stuff */
"^@"="setMark:"; /* C-@ */
"^ "="setMark:"; /* C-space */
"^w"="deleteToMark:"; /* C-w */

"^x" = {
"u"="undo:"; /* C-x u */
"k"="performClose:"; /* C-x k */
"^f"="openDocument:"; /* C-x C-f */
"^s"="saveDocument:"; /* C-x C-s */
"^w"="saveDocumentAs:"; /* C-x C-w */
"^x"="swapWithMark:"; /* C-x C-x */
"^m"="selectToMark:"; /* C-x C-m */
};
}

其中 "^x" = { } 裡的代表複合快捷鍵,以 "^x" 及 "^f" 為例,先按 Ctrl + x
再按 Ctrl + f。其他可以類推。

檔案修改好後,先登出再重新進入,即可使用 emacs 風格快捷鍵。要注意如果檔案
有錯誤的話,即無法使用,這時請檢查 DefaultKeyBinding.dict 這個檔案,修改後
再重新登出及登入。

在 Page、Keynote 或文字編輯(TextEdit)中都可以使用 emacs 風格快速鍵。但是
Microsoft Word 或 PowerPoint 中則無法使用。

設定完後,即可使用以下的 emacs 風格快速鍵。注意其中混有少數 readline 模式
快速鍵,和標準 emacs 快速鍵略有不同,但操作後覺得順手,故如此設置。
實際用起來,覺得移動和刪除相關快速鍵最好用,至於區塊操作則因不會反白而顯得
不夠直覺好用,其他實用性普通,給各位參考。

移動
C-f: 向右移動一個字元(character)
C-b: 向左移動一個字元
M-f: 向右移動一個單字(word)
M-b: 向左移動一個單字
C-p: 向上移動一行
C-n: 向下移動一行
C-a: 移到行首
C-e: 移到行尾
C-v: 向下移動一頁
M-v: 向上移動一頁
M-<: 移到檔首
M->: 移到檔尾

刪除
C-/: 回復一次動作(readline 模式)
C-_: 回復一次動作
C-x, u: 回復一次動作
C-d: 向右刪除一個字元
M-d: 向右刪除一個單字
C-h: 向左刪除一個字元(readline 模式)
C-M-h: 向左刪除一個單字(readline 模式)
C-k: 自游標刪至行尾
C-u: 自游標刪至行首(readline 模式)

編輯
C-j: 插入空白行
C-y: 貼上刪除的內容

區塊操作
C- (空白鍵): 設置區塊起始點(mark)
C-@: 設置區塊起始點
C-w: 刪除區塊
C-x, C-x: 將游標位置置換到區塊尾端
C-x, C-m: 選取區塊

其他
M-u: 將單字轉為大寫字母
M-l: 將單字轉為小寫字母
M-c: 將單字字首轉為大寫字母

========================= 本文結束 =============================

如果想要再擴充或改良快速鍵,看來會牽涉到 cocca 程式設計。但實在是沒有 cocca
程式設計的經驗,故希望有經驗的大大可以提供意見。

希望這篇文章對你有用。:-)

3 comments:

  1. → Jerrynet:fn+上下左右 不就是home,end,pageup,pagedown 嗎@@? 06/13 17:08
    推 croft:我是用keyremap4macbook 將r-option改成fn鍵 06/13 17:15
    → croft:這樣 home,end,pageup,pagedown 只要用一隻手就可以解決 06/13 17:16
    → uranusjr:..........Cocoa 軟體中 cmd 加上下左右 = 上一頁/下一頁 06/13 17:58
    → uranusjr:移到行頭/移到行尾, 根本不是用 PgUp/PgDn/Home/End 06/13 17:58

    ReplyDelete
  2. 推 skkle:我比較好奇的是,程式結束的時候會問要不要存檔或取消 06/13 19:01
    → uranusjr:return 確定, esc 取消, cmd d 不要儲存 06/13 19:02
    → skkle:大部分這個時候按tab都沒有辦法移動焦點,只好用滑鼠… 06/13 19:02
    → skkle:u大回得也太快了吧(汗)原來是cmd+d喔!!感謝~~~ 06/13 19:04
    推 dm4:在 Cocoa 軟體裡,移到行首/尾是 ctrl+a/e 06/13 20:10

    ReplyDelete
  3. 推 KBchen:正常來說 拖拉直接就是搬移 不用回去刪除 06/13 22:02
    → KBchen:只有在拖到像外接硬碟的情況才會變成複製 06/13 22:03
    → uranusjr:拖到外接裝置有個解, 按著 cmd 拖就會變成搬移不是拷貝 06/13 22:04
    推 ducksteven: 拖拉搬移有個解,按著 opt 拖就會變成拷貝不是搬移 06/13 22:15
    推 theory:你完全不了解 Mac OSX 的苦心..剪下貼上是很危險的事 06/14 00:11
    推 ducksteven:我也不懂,還請樓上解說ˊˋ 06/14 00:36
    → windprism:用拖拉來搬移跟複製的方法我知道,可是太浪費時間了, 06/14 00:37
    → windprism:很多時候快速鍵的存在還是會有非常非常大的幫助... 06/14 00:38
    推 Blueshiva:快速鍵的存在在某些情況下是有幫助,尤其對於Windows這 06/14 00:40
    → Blueshiva:個視窗管理很爛的系統而言...不過Mac就不需要了 06/14 00:41
    → windprism:不是很認同樓上的說法,快速鍵的存在就是要加速操作的 06/14 00:44
    → windprism:效率,再說,MAC OS也設定了很多快速鍵給使用者不是? 06/14 00:45
    推 bag:我是覺得… mac 有意無意的在一些小地方讓人去意識到「這不是 06/14 00:45
    → windprism:即使我用MAC OS,我還是需要大量的仰賴快速鍵來加速操作 06/14 00:46
    → bag:windows系統」,比方cmd+x這種小細節之類的 06/14 00:46
    → bag:也許對apple來說 故意保持某些操作上的差異是種刻意的策略吧 06/14 00:47
    推 Blueshiva:我是指所謂的 "剪下" 這件事 :p 06/14 00:53
    → windprism:用MAC還是需要剪下貼上呀... ~"~ 06/14 01:06
    推 Blueshiva:Why?因為你之前用習慣Windows?這不是一個打破Mac長久使 06/14 01:11
    → Blueshiva:用邏輯的好理由 06/14 01:11
    推 bag:反正apple不想給你的 就是不會給你 也不需要去合理化啦… 06/14 01:12
    推 kevin77714:可以在偏好設定 -> 一般 -> 以單一視窗打開檔案 06/13 22:19
    推 dryman:可否借轉至Editor版? 06/13 22:43

    ReplyDelete