導航:首頁 > 程序命令 > emacs命令退出

emacs命令退出

發布時間:2022-09-19 11:06:23

1. 請教emacs中退出term的方法

在想要執行的命令前面加上 C-c 的前綴。例如,如果你想執行 C-x C-b 來查看 Buffer 列表,就輸入 C-c C-x C-b。另外,可以用 C-c C-h 來查看以 C-c 開頭的快捷鍵。

2. emacs編寫c++


第一步,輸入命令emacs main.cpp 編寫c++代碼
第二步,在emacs軟體下依次輸入Control+x,Control+s,這是保存cpp文件
第三步,在emacs軟體下依次輸入Control+x,Control+c,這是退出emacs編輯軟體
第四步,在main.cpp文件所在的路徑下,輸入g++ -o main main.cpp,這是對cpp文件進行編譯,此步會生成一個可執行文件main
第五步,輸入./main 即可運行所編譯的可執行文件

3. Emacs基本的按鍵與命令

C- :表示鍵盤上的 Ctrl 鍵

M- :表示鍵盤上的 Alt 鍵

S- :表示鍵盤上的 Shift 鍵

DEL :表示鍵盤上的 Backspace 鍵,注意,不是 Delete 鍵

RET :表示鍵盤上的 Enter 鍵

SPC :表示鍵盤上的 Space 鍵

ESC :表示鍵盤上的 Esc 鍵

TAB :表示鍵盤上的 Tab 鍵

C-x C-f :打開一個文件,或者創建一個不存在的文件

M-x find-file :作用同上

C-x k :關閉一個 buffer ,作用等於關閉已經打開的文件

C-x C-s :保存文件內容,即將修改的文件內容寫入磁碟

M-x save-buffer :作用同上

C-x C-w :將當前文檔保存為另一個文件,即另存為

M-x write-file :作用同上

C-x b :切換文件,即切換緩沖區 buffer

說明:實際上在 Emacs 中,文件與 buffer 是不同的實體,文件一般指的是磁碟上的數據體,而 buffer 是 Emacs 中作為文件修改臨時緩存的緩沖區,注意區別。

Emacs具有一個被稱為 ido 的模式,全稱為 interactively do things ,在 ido 模式下,可以更加方便地選擇列表元素,相比使用Tab進行自動補全更加便利。

M-x ido-mode :使能或者禁止 ido 模式

可以在 Emacs 的啟動配置中添加以下語句,以默認打開 ido 模式:

(setq ido-enable-flex-matching t) (setq ido-everywhere t) (ido-mode 1)

C-x C-b :列出buffer列表

M-x list-buffers :作用同上

在 Emacs 中,還存在功能更靈活的 buffer 管理模式,被稱為 ibuffer 。可以通過以下命令進入 ibuffer :

M-x ibuffer :進入 ibuffer 管理模式

一般我們可以在Emacs的配置文件中進行ibuffer的命令鍵綁定:

(global-set-key (kbd "C-x C-b") 'ibuffer)

ibuffer 的過濾命令包括:

/m :以 major mode 方式添加過濾

/n :以 buffer 名稱的方式添加過濾

/c :以 buffer 內容的方式添加過濾

/f :以文件名稱的方式添加過濾

/> :以 buffer 大小的方式添加過濾

/< :以 buffer 大小的方式添加過濾

// :刪除當前所有有效的過濾

ibuffer 的過濾組的命令包括:

/g :創建一個過濾組

TAB :移動到下一個過濾組

M-p :移動到上一個過濾組

/ :刪除當前所有的過濾組

/S :將當前過濾組保存為一個名稱

/R :恢復之前保存的過濾組

/X :刪除之前保存的過濾組

ibuffer的排序命令包括:

s a :以字母順序排序

s f :以文件名稱順序排序

s v :以上次訪問時間排序

s s :以 buffer 大小排序

s m :以 major mode 排序

s i :反序當前的 buffer 順序

可以在文件的任何地方設置書簽,後續可快速跳轉到書簽處,書簽相關的命令為:

C-x r m :在當前游標處設置書簽,需輸入書簽名稱

M-x bookmark-set :作用同上

C-x r b :跳轉到某個書簽處

M-x bookmark-jump :作用同上

C-x r l :列出當前所有的書簽列表

M-x bookmark-bmenu-list :作用同上

在書簽列表狀態下,可以使用以下的命令:

RET :打開書簽標識的區域

s :將當前書簽列表保存至文件中

r :修改游標所在的書簽的名稱

d :將書簽打上刪除標識

x :刪除已打標識的書簽

u :取消已經打標識的書簽

主要的游標移動操作命令包括:

C-f :向前移動一個字元, f 表示為 forward

C-b :向後移動一個字元, b 表示 backward

C-p :向上移動一行, p 表示 previous

C-n :向下移動一行, n 表示 next

C-a :移動至行首

C-e :移動至行尾

M-f :向前移動一個單詞

M-b :向後移動一個單詞

C-v :向前滾動一個屏幕的內容

M-v :向後滾動一個屏幕的內容

M-a :移動至句首

M-e :移動至句尾

C-l :將游標重定位至屏幕中間一行,游標所在內容位置不變

M-r :將游標重定位至屏幕的頂部,中部,底部,游標所在內容位置不變

M-< :移動至 buffer 的開頭處,注意,按鍵 < 可能需要 Shift 鍵

M-> :移動至 buffer 的結尾處,注意,按鍵 > 可能需要 Shift 鍵

M-g c n :移動至第 n 個字元

M-g g n :移動至第 n 行(高於23.2版本的 Emacs 有效)

C-M-f :向前移動一個整的表達式,比如,游標可從函數開頭的左 { 處移動到函數結尾的 } 處,按鍵綁定的命令是 forward-sexp

C-M-b :向後移動一個整的表達式,比如,游標可從函數結尾的右 } 處移動到函數開頭的 { 處,按鍵綁定的命令是 backward-sexp

C-M-k :剪切一個整的表達式,按鍵綁定的命令是 kill-sexp

C-M-@ :選擇一個整的表達式,按鍵綁定的命令是 mark-sexp

在 Emacs 中, kill 的意思就是 cut ,即剪切,剪切操作的命令包括:

C-d :剪切當前游標所在的字元

C-S-DEL :剪切整個行, DEL 就是鍵盤上的 Backspace 鍵

M-d :剪切游標當前位置至詞結尾的內容

M-DEL :剪切游標當前位置至詞開頭的內容

M- :剪切游標所在的所有空白符

M-SPC :剪切游標所在的所有空白符,除了游標所在的位置

C-k :剪切游標當前位置至行尾

M-k :剪切當前的整個句

C-y :粘貼操作

一般在 Emacs 中,默認的選擇操作,需要使用 C-SPC 按鍵,但是通常在 Win 中,此按鍵與系統默認的切換輸入法的按鍵沖突,如果無法修改系統的按鍵,則可以修改 C-SPC 按鍵,在 Emacs 的啟動腳本中添加以下的語句:

(global-unset-key (kbd "C-SPC")) (global-set-key (kbd "M-SPC") 'set-mark-command)

以下以 M-SPC 作為默認的選擇命令:

M-SPC :以游標所在位置為起點,移動游標,所選區域被高亮選中

C-w :剪切高亮選中的區域

M-w :復制高亮選中的區域

C-y :粘貼高亮選中的區域

C-/ :撤銷操作

C-x u :作用同上

Emacs 具有多種查找方式。

增量查找 :通過按鍵 C-s 來執行增量查找,反復執行 C-s ,可逐個定位各個匹配點。

C-s :執行增量查找,輸入查找字元後,重復執行 C-s 可逐個定位匹配點,按鍵綁定的命令是 isearch-forward

C-r :執行增量查找,是從文檔的後端往前查找,重復執行 C-r 可逐個定位匹配點,按鍵綁定的命令是 isearch-backward

C-u C-s :按照正則表達式執行增量查找

Occur查找 :使用增量查找,若匹配點比較多,只能通過反復執行按鍵,逐個越過各個匹配點,才能定位到我們需要的匹配點,為了解決這個問題, Emacs 提供了 Occur 查找,執行後,可在 Occur 緩沖區列出一個匹配點的列表,可更加直觀地查看所有的匹配點。

M-s o :執行Occur查找

M-g n :定位到下一個匹配點

M-g p :定位到上一個匹配點

在 Occur 緩存區,可以執行的命令主要包括:

C-n :移動至下一行

C-p :移動至上一行

o :跳轉至匹配點,游標也移動至匹配點

C-o :跳轉至匹配點,但是游標還停留在 Occur 緩沖區

e :編輯當前的 Occur 緩沖區

C-c C-c :退出編輯 Occur 緩沖區

M-% :執行查找替換,該命令需要兩個輸入,即需要被替換的字元串,與替換後的字元串。輸入字元串後執行 RET , Emacs 會詢問是否確定執行替換操作,若輸入 ! ,則執行所有匹配點的替換,若輸入 yes ,則只執行當前游標所在的匹配點的替換。注意,輸入 % 可能需要執行 Shift 鍵

C-x 2 :將當前窗口切為上下兩個窗口,該按鍵綁定了命令 split-window-below

C-x 3 :將當前窗口切為左右兩個窗口,該按鍵綁定了命令 split-window-right

C-x o :在多個窗口之間切換,注意,按鍵中的是小寫字母 o ,該按鍵綁定了命令 other-window

C-x 1 :關閉其他的窗口,只保留當前游標所在的窗口

Emacs 具有一個內置的 Dired 模塊,是 Directory Editor 的簡稱,顧名思義,該模塊是對目錄進行管理編輯的模塊。

Dired 模塊的主要命令包括:

C-x d :選擇一個目錄,並在那個目錄上啟動 Dired

C-x C-f :選擇當前目錄下的某個目錄,並在那個目錄上啟動 Dired

在 Dired 目錄下可以執行:

n :向下移動一個

p :向上移動一個

C-s :使用增量查找,查詢 Dired 入口

C-x C-f :創建一個新的文件

f :打開游標所在的文件

e :作用同上

RET :作用同上

o :在另一個窗口上打開游標所在的文件

C-o :在另一個窗口上打開游標所在的文件,但是游標不會移動到新的窗口

v :以只讀的方式打開文件

^ :在新的Dired Buffer中打開父目錄

m :標識文件或者目錄入口

%m :標識那些名稱匹配正則表達式的文件

%g :標識那些內容匹配正則表達式的文件

C :拷貝文件(或者是 S-c ),拷貝的是當前游標所在的文件,或者已經標識的文件

R :移動文件(或者是 S-r ),移動的是當前游標所在的文件,或者已經標識的文件

H :創建一個硬鏈接(或者是 S-h )

S :創建一個符號鏈接(或者是 S-s )

M :改變文件的許可權位(或者是 S-m ),改變的文件是當前游標所在的文件,或者已經標識的文件

d :將文件打上刪除的標識

u :刪除文件已經打上的標識

x :確認並執行刪除已經打上刪除標識的文件

~ :給所有的 backup 文件打上標識

= :比較文件

4. emacs 高手進

你可以用c-x 2或c-x 3把窗口分成兩個,再用c-x o(這個是字母O)切到另外一個窗口,然後按m-x(m就是ALT了)輸入shell回車,emacs會在當前窗口調用shell(windows的話就是cmd了),現在就可以把這個窗口當cmd窗口來用了,你直接打入要執行的文件名,比如asdf.exe,就可以看到運行情況。
由於這是個shell窗口,只要你的gdb在環境變數中,你在這里也可以直接調用gdb來調試程序,要是你的gdb是insight的那個版本,就更爽了,一個單獨的調試窗口會彈出來,全部圖形化的調試,否則就在命令行下用gdb調了,它的功能都可以正常使用。

5. 如何讓emacs的游標回到上次游標處

用vi命令打開文件直接跳到最後一行的方法如下:
:$ 跳到文件最後一行
:0或:1 跳到文件第一行
或 另外一組命令:
gg 跳到文件第一行
Shift + g 跳到文件最後一行
常用的操作:
查看當前目錄:pwd 修改密碼:passwd 更換模式:csh,bash
遠程登陸:telnet 伺服器ip 回到上級目錄:cd ..
查看該目錄下的文件夾:ls 打開文件:vi /文件夾/文件
文件顯示的格式:root:x:0:root„:/root;/bin/bash 用戶名,加密,序號,組,默認路徑 退出:esc shift+: q! quit exit 清空:clear
顯示當前目錄所有文件:ls –a
顯示當前目錄所有文件和詳細信息:ls –al 新建文件:vi 文件名
文件的許可權:chmod g –(+)r w x u g o s
新建文件(不能編輯)更新文件的訪問時間,如果存在文件,更新,不存在,建立:touch 文件名 創建目錄:mkdir 目錄名/目錄名
創建多個目錄:mkdir 目錄名 目錄名„..
在主目錄創建下目錄:mkdir ~/目錄名 創建多級目錄:mkdir –p 目錄名/目錄名 在覆蓋文件前做個提示:cp –I 文件和文件內容間的拷貝:cp 復制目錄:cp –r 目錄 目錄 復制文件:cp 文件 文件
移動文件:mv 要移動的文件 要移動到的目錄 移動目錄:mv -fi要移動的目錄 要移動到的目錄 修改文件或目錄的名字:mv 文件 名字 刪除文件:rm rm –I提示
刪除目錄中的所有內容包括目錄:rm –r 要刪除的文件夾
連接:軟連接:相當於創建快捷方式,作用:修改linux內核會用到他 in 硬連接:如果刪除源文件,被連接的文件內容還存在 幫助:man 命令
進入vi的命令 :
vi filename :打開或新建文件,並將游標置於第一行首 vi +n filename :打開文件,並將游標置於第n行首 vi + filename :打開文件,並將游標置於最後一行首
vi +/pattern filename:打開文件,並將游標置於第一個與pattern匹配的串處 vi -r filename :在上次正用vi編輯時發生系統崩潰,恢復filename vi filename....filename :打開多個文件,依次進行編輯。

6. emacs怎麼編寫c程序

emacs 的 compile 命令是調用 make 來編譯的,而make是需要makefile的,你只有.c,沒有寫makefile,所以無法編譯。
關於 make/makefile 是另外一個很大的課題,這里不多說。

寫好代碼後, C-x C-s 保存,然後自己打開一個shell, 如bash,然後用
gcc myc.c -o myc
來編譯,然後用 ./myc 來執行即可。

如果想在 emacs 中啟動shell,也可以用 M-x shell 命令,然後重復上面的編譯和執行命令。

7. ubuntu里的emacs快捷鍵設置

把上面這些配置行,
(global-set-key[f5] 'compile);
(global-set-key[f6] 'gdb);
添加到你的用戶主目錄中(也就是./home目錄下,如果多用戶的話,則在再下一層有你用戶名的目錄)的emacs配置文件'.emacs'中,該文件是隱藏文件,gnome下進入用戶主目錄後Ctrl-h即可顯示所有隱藏文件,找到後可添加;若沒有的話自己新建一個.emacs文件。然後在打開emacs時就可以自動載入配置了。

具體配置快捷鍵可參考 http://xahlee.org/emacs/keyboard_shortcuts.html

8. texlive 怎樣使用emacs

以前,我多次試圖從 vim 轉變到 emacs 都失敗了。原因很多,主要原因是 vim 的確一個很強大的 editor 不愧為 emacs 的主要競爭對手,vim 很多強大的功能,很難在 emacs 中找到相應的功能,那個時候還沒有水木Emacs版,如果有的話,情況會好一些, 還有一個原因就是我周圍幾乎沒有人用 emacs ,現在也是。 emacs 的入門比較 vim 要困難很多,我指的入門不是指簡單的使用,而是高效的使用。vim 的很多操作幾乎不需要配置就可以完成了,但是如果離開我那些復雜的 .emacs 文件,我認為 emacs 並不比 vim好。有了我的 .emacs , emacs 絕對是最好的 platform (not only an editor) ,因為他是我的軟體,一些我常用的功能,都是按照我的方式工作的,而且我可以隨時實現我喜歡的功能,也許別人不喜歡這樣的操作,但是我喜歡,我可以讓 emacs 讓我喜歡的方式操作。幾乎沒有其它軟體可以做到這一點。我轉變到 emacs 是一個痛苦和偶然的過程。我曾經煞有介事的「學習」 emacs , 寫了很多筆記,現在看來,很傻,emacs 不是學出來的,是用出來的,很多功能不是用腦子記住的,而是用手記住的,我們不得不承認,有的時候肌肉的記憶能力,要比腦子的記憶能力強,而且快速,實用。很多體育運動員不就是用大量的訓練提高肌肉對動作的記憶嗎?一次偶然的機會我發現了幾個 vim 無法代替的幾個功能,於是我開始真正喜歡 emacs 了。(註:筆者做此文時,vim版本為6.2)首先是編寫 TeX 文件的時候,很多數學符號可以快速的輸入,可以方便的生成 dvi 文件,可以快速的輸入 TeX 特有的特殊符號。然後是 python mode ,他是非常好的 Python 的 IDE ,可以很容易的編寫 Python 程序,尤其是 Python 程序中用縮進來表示語法結構,在Emacs中很容易處理縮進。很容易把一段代碼放入到Python 的解釋器中執行,然後在解釋器中交互的測試程序。參見 我的Python 學習筆記一個編輯 C or C++ 的時候的一些功能,例如 auto insert 功能,hungry delete, M-SPC(M-x just-on-space) indent 功能 (TAB) ,在 emacs 中寫出來的程序,是最漂亮的格式。最重要的是還可以選擇自己喜歡的 c style 。 當然 vim 中也可以,但是默認的是用 tab 鍵格式化 ,這樣的缺點就是不能保證程序在所有的編輯器中都是一樣的效果,但是我以前也用 TAB 來 indent ,原因是我不願意輸入很多 space 。而且 vim 對重新 indent 一段代碼的功能也不是很好,盡管 g= 等等鍵也可以工作,但是不如 emacs 中的好。vim 中的很多編輯命令要比 emacs 快的多,只要輸入很少的鍵。但是, 我認為中 emacs 的理念是,有很多工作,做好不要讓用戶記住那些快鍵,按照用戶的習慣,猜想用戶(主人)的意思,默默的做好(討好用戶)就行了。例如,在 C 中,我們習慣用 tab 鍵來 indent 程序。那麼就用 tab 鍵來 完成 M-x indent-line 的功能。我們經常在輸入分號之後, 輸入一個回車,那好,emacs 就根據上下文猜測應該回車的地方,自動回車。你想刪除很多空格,那好,emacs 就會根據上下文,只留下一個空格(M-x just-on-line) 或者空行(M-x delete-blank-line) ,如果你在只有一個空行下還要 M-x delete-blank-line ,那麼就把single blank line 也刪掉。還有的功能也很好用。View Code LISP 12 C-c C-c (M-x comment-region)C-u C-c C-c uncomment-region 還有自動補齊右邊括弧,補齊引號的功能,還有補齊大花括弧的功能。 參見Emacs 中自動添加有半邊括弧的功能和寫C程序,輸入左大花擴號自動補齊很多東西還有abbrivate 擴展的功能。還有fly spell 的功能。 emacs 知道主人是個粗心的人自動提示主人錯了,但是 emacs 從來不把主人當傻瓜,不會自作聰明的改動,只有主人真的承認說,我錯了 (按M-$)(註:我記不住具體的M-x 命令了,可以用C-h k 查一個鍵的bind 的函數,記做 help key bind , 也可以用 C-h w 記做 help where, 查找一個函數的快鍵是什麼 ) ,emacs 就提示很多可選的單詞,供主人選擇。 我記得有一個著名的把用戶當作傻瓜的軟體,總是把句子的行首單詞Capitalize,而且自動把他認為錯了的單詞改過來,每次我都要費盡心機想辦法,怎麼把這個功能關掉。還有auto fill 的功能, M-q 也總能幹正確的事情。還有version control 的功能,emacs 幾乎不用主人親自備份文件了,他知道應該在合適的時候,備份文件。還有auto insert 的功能,他會自動根據環境,把當前的文件增加可執行許可權,參見在保存文件的時候,會自動給腳本增加可執行許可權還可以自動增加#!/bin/bash or #!/bin/perl #!/bin/python 。
參見Emacs 在創建文件的時候,自動添加 template 的內容header.el的擴展還可以自動插入和更新 C 文件中的開頭的一些信息,包括文件名稱,創建日期,改動次數,紀錄誰在什麼時候為什麼做了修改。還有公司信息,作者信息,版權信息等等。

9. emacs 的使用:哪些是真正有用的組合鍵

早期的 Shell 直接運行在各種各樣的 Terminal 裡面,隨著時間的推移,我們有了 X Window。大量的 Shell 開始運行 Xterm 裡面。對於筆者來說呢,更加喜歡讓 Shell 運行在 Emacs 裡面。將 Shell 運行在 Emacs 裡面與運行在 Xterm 裡面到底有什麼不同呢?相信我,將 Shell 從 Xterm 裡面搬出來絕對不是一個賺取眼球,標新立異的決定。這篇文章介紹了將 Shell 從 Xterm 裡面搬到 Emacs 裡面帶來的各種改變。這篇文章適合 Emacs 的初級與中級用戶,需要讀者具有一定的 Shell 使用經驗。最好具有較長時間的 Shell 使用經歷,以更加充分的體會到 Emacs 帶來的變化。文章中的內容謹代表作者的個人觀點。不代表 IBM 的任何官方觀點。所附代碼僅在運行於 Cygwin 環境下的 GNU Emacs 當中測試通過。 您可以訪問「Emacs 編輯環境「系列教程來了解更多和 Emacs 相關的內容: Emacs 編輯環境 為什麼要使用 Shell? 我不也太清楚,但是,在這樣一個 Windows 橫行的年代裡,總是有著無數的 Unix 管理員在遍布全球的各個角落裡默默奉獻,保證著我們的世界繼續運行。那麼,為什麼要在 Emacs 裡面使用 Shell? 在Emacs 裡面使用 Shell 和在其他地方相比,比如說 xterm,甚至是 Windows 的命令行窗口裡面使用 Shell 有什麼不一樣呢?這個問題,我個人認為不是一個技術問題,而是一個生活舒適度的問題。之所以選擇在 Emacs 裡面使用 Shell,就是因為在 Emacs 裡面會使你的生活的更加舒適。 生活舒適度的問題 信不信由你,人們總是希望生活的更加舒適。那麼,把 Shell 搬到Emacs 環境里究竟能夠帶來那些生活舒適度的提高呢?在回答這個問題之前,讓我們先進行一個簡單的熱身運動。 大家都知道,現代的 Bourn Again Shell(bash) 要比古老的 Bourn Shell(sh) 用起來舒服多了。因為 Bourn Again Shell(Bash) 引入了很多非常舒服的新的特性。比如說歷史 (History) 功能,比如說命令行編輯功能。這些都是大家非常喜歡的功能。不是嗎?但是,問題是,如果你想在 Shell 的世界中生活的更加舒適,就會發現很多時候他都不能真正的讓你滿意。 通常來說,但凡有過在古老的 Bourn Shell(sh) 或者某些缺乏歷史功能的 Korn Shell(ksh) 環境下的使用經驗的人來說,Bourn Again Shell(bash) 的歷史 (History) 功能都是一個非常可愛的功能。它提供了很多很好的重復歷史命令的有趣方式,我們可以使用 ! 命令去全部或者部分的引用上一條剛剛執行過的命令,我們可以使用 ^^ 命令簡單編輯上一條命令並且生成一條新的命令,我們可以也使用向上的箭頭鍵去回朔查找許久以前曾經執行過的命令,然後使用命令行編輯功能隨心所欲的編輯這條命令。但是這裡面有一個非常隱蔽的問題:所有這一切,都是集中在「命令行」這個概念中的。說白了,各種各樣的不同的 Shell 版本提供給我們的就是一個命令解釋器,外加一個命令行編輯環境。 這樣有什麼不對嗎?對,但是慾望總是沒有止境的。為什麼不能夠全屏幕編輯呢? 讓我們來看看一個很簡單的例子。我有一個 Omegamon XE for Messaging 的安裝。這是 IBM Tivoli 旗下的一款監控產品。通過與 IBM Tivoli Monitor 產品的集成,實現對 WebSphere MQ,WebSphere Message Broker 產品的運行監控,以及對 WebSphere MQ 產品的修改與配置。由於某種需要,現在我需要將一個 MQ Monitoring agent 停止下來。我不想將那個漫長的命令從頭到尾輸入一遍,因為我知道我可以使用 history | grep 『itmcmd agent』 命令從已經存在的命令歷史裡面找到曾經啟動這個 agent 的命令,然後我所要做的,僅僅只是在原來命令的基礎上將 start 參數修改為 stop 就可以了。但是……事實上 Shell 並沒有給我一個修改這條命令的機會。 圖1 事實上我必須先用滑鼠將屏幕上的第 437 條命令復制到剪貼板裡面,然後把它粘貼到我的命令提示符後面,之後再使用 bash 的命令行編輯功能,將那個可愛的 start 參數修改為 stop。說實話,我的某些同事每天就是這樣做的,另一些則是乾脆將停止命令從頭到尾再輸入一遍。回答我一個問題,你有沒有曾經也像我一樣,在看到 history | grep 的輸出的時候,曾經夢想過,能夠直接在第 437 條命令上面改幾個字母,然後就直接敲下回車呢?現在你可以了--在 Emacs 裡面。在 Emacs 裡面,你可以將你的 Shell「擴展」到全屏幕編輯。 讓我們重新查找剛才提到的那條命令。這一次,我們不用 history | grep 的方法。是的,這個方法仍然管用。但是既然是在 Emacs 裡面,我希望介紹一些更加 Emacs 化的使用方法,我們使用 Ctrl-r 組合鍵。如果你已經使用過 Emacs,但是從來還沒有在 Emacs 裡面看到過 shell 提示符的話,不妨跟我一起來,在 Emacs 當中輸入 ESC-x 組合鍵,然後在提示緩沖區裡面輸入 shell(全部字母小寫)回車,然後你就會在 Emacs 的編輯緩沖區裡面看到熟悉的 shell 提示符了。在接下來的例子裡面我們假設你已經執行過啟動 MQ Monitoring agent 的那條命令了,大約是在 4 個小時前或者別的什麼時候。現在要做的,就是把這個特定的 agent 停止下來。跟我一起在 Emacs 裡面輸入 Ctrl-r 組合鍵,這個時候你會在提示緩沖區裡面看到 I-search backward: 這樣的字樣。沒錯,這個組合鍵對應的就是 Emacs 當中的回朔查找的功能。我們所要做的,就是像通常在一篇文檔裡面查找一個句子一樣,在回朔查找提示符的後面輸入 itmcmd agent,Emacs 非常迅速的就把游標定位到了曾經執行過的 bin/itmcmd agent –o QM_106 start mq 這一行命令上面。就在這里,讓我們把 start 修改為 stop,然後,直接就在這里按下回車鍵--修改以後的命令會自動的被復制到正確的 shell 提示符後面並且被執行。無窮無盡的拷貝與粘貼終於被終結了。 更理想的情況下,如果你想修改的命令還仍然顯示在你當前的屏幕范圍內(這在我的工作當中覆蓋了大多數情況),甚至可以省略使用 Ctrl-r 組合進進行查找的過程,直接移動游標到你需要的命令,修改,或者回車就是了。 圖2回頁首 技術性擊倒 上面提到的還只是一些很簡單的事情。或者說是一些使用習慣方面的事情。每個人都有自己的生活習慣。我就見過一些人,他們甚至很少使用 History 功能。他們執行每一條命令都會從頭到尾輸入進去。如果中間有什麼東西寫錯了,他們會停下來再輸一遍。我只能承認我沒有他們那麼勤奮了。 下面我們要談論一些真正技術性的問題。一個實際工作中的案例問題。我在上面提到過,我的日常工作的一部分就是使用 Omegamon XE for Messaging 產品,既然他是監控 WebSphere MQ 的一款產品,那麼同樣意味著我也會頻繁使用 WebSphere MQ 產品。一天,我需要處理這樣一個問題,我有 11 個處於停止狀態的隊列管理器(Queue Manager),他們全部需要啟動起來。 圖3 通常在 shell 環境下,會有兩個選擇。第一個選擇,一條一條的編寫 11 條strmqm 命令,將所有這些隊列管理器一個一個地啟動起來。第二個選擇,我可以使用 SED 實用工具編寫一些小腳本,利用 dspmq 命令產生的輸出內容來生成這 11 條命令,並把它們輸出到一個文件裡面。是的,在使用 Emacs 之前我是使用這第二種方法的。現在,在 Emacs 裡面,我可以使用第三種選擇,一種所見即所得的選擇。Emacs 不僅提供了全屏幕編輯的全套功能,而且還提供了超越傳統編輯方式的矩形編輯功能。使用這個功能,你可以把屏幕上的任何內容作為一個矩形塊進行剪切或粘貼操作。現在跟我一起,把游標定位到 QM_100 的字母 Q 的位置,並輸入 Ctrl-@ 組合鍵設置起始的標記位。接下來把游標移動到 QM_110 的數字 0 的後面,輸入 Ctrl-x r k 組合鍵(對,一共是 4 個按鍵。但是仍然非常容易記憶,只要記住中間的 r 是rectangle 的縮寫就行了,所有的矩形編輯命令都會有這個 r 字母加入)。看看屏幕上面發生了什麼?是的,所有的隊列管理器的名字全都不見了。他們被作為一個矩形塊剪切進了 Emacs 的刪除環(king-ring)當中。 圖4 接下來,讓我們將這些剪切下來的隊列管理器的名字粘貼到一個用來啟動這些隊列管理器的腳本文件中去。在這里我們使用最簡單的 here 文檔的功能 cat <<eof >strmqm.sh,創建一個空白的腳本文件。然後,在 Emacs 當中輸入 Ctrl-x r y 組合鍵,這個組合鍵的作用是將刪除環裡面的矩形文本塊作為一個矩形,粘貼回去。下面的截圖就是你在屏幕上所看到的結果。 圖5 沒錯,你注意到了,我們真正需要的並不是隊列管理器的名字列表,而是一連串 strmqm QM_100 這樣的 shell 命令。沒問題,接下來讓我們繼續使用 Emacs 的矩形編輯功能來完成這些命令。再次把游標移動到 QM_100 的字母 Q 的位置,輸入 Ctrl-@ 組合鍵設置標志,然後移動游標到 QM_110 的字母 Q 的位置,輸入 Ctrl-x r p 組合鍵。這個組合鍵的作用是在選定的位置前面填充一個矩形區域,填充的內容在提示緩沖區裡面輸入。現在在提示緩沖區裡面 string insert rectangle: 的提示符後面輸入 strmqm 加空格。下面的截圖就是這個時候你在屏幕上所看到的結果。 圖6 這裡面有一個小秘密需要提示一下,因為在 here 文檔的提示符下事實上是不可能進行這樣的修改的。但是,直到目前為止 Emacs 還沒有將編輯緩沖區里的內容傳遞給 here 文檔提示符。以上所做的一切還都僅僅發生在 Emacs 內部。 現在輸入一個回車鍵,已經編輯好的 11 條strmqm QM_1xx 命令就已經傳遞給 here 文檔提示符了。最後輸入 eof 結束文檔編輯。一個簡單清晰的隊列管理器啟動腳本就已經完成了。只要在 shell 提示符下通過 bash strmqm.sh 命令運行它,就可以啟動所有這 11 個隊列管理器了。 圖7回頁首 一些有趣的小技巧 第一個小技巧:在 Emacs 裡面同時打開多個 shell 會話 這聽起來應該是理所當然的,既然 Emacs 可以同時運行多個窗口……但是即使是在我買的那本關於 Emacs 的書裡面也沒有提到如何能夠真的打開多個 shell 會話。讓我們試試看,輸入 ESC-x shell 啟動shell 會話,在 shell 提示符下執行 cd /tmp 命令,然後輸入 Ctrl-x 2 組合鍵將屏幕切分成上下兩個窗口,然後再次輸入 ESC-x shell 啟動shell 會話,你會發現 Emacs 不為所動。在上下兩個窗口裡面仍然還是 cd /tmp 命令執行後的結果,也就是說仍然還是原先的那個 shell 會話。說起來 O』reilly 公司應該退還我一部分書錢,因為他們沒有將我想知道的問題講明白。後來我終於發現了解決的辦法。只要我將當前的 shell 會話所在的緩沖區重新命名,然後就可以再次啟動一個新的 shell 會話。讓我們來試試看。輸入 ESC-x rename-buffer,在 Rename buffer (to new name): 提示符後輸入一個新名字,例如 *shellA*。這個時候你會看到上下兩個窗口中的緩沖區都被重命名為 *shellA* 了,是的,他們顯示的是同一個緩沖區。現在在任意一個窗口裡面輸入 ESC-x shell 啟動shell 會話,這時你會看到一個新的 *shell* 緩沖區創建了出來,並且有了一個新的 shell 提示符。現在讓我們在這個新的 shell 提示符下執行 cd / 命令,你會發現,緩沖區 *shellA* 當中的 shell 會話並沒有受到新的命令的影響,因為他們是兩個不同的 shell 會話。重復同樣的方法,可以得到更多的 shell 會話,滿足你的使用需要。 圖8 第二個小技巧:history | grep 的輸出結果可以直接輸入回車使用 讓我們再回到當初提到過的第 437 條命令。如果需要再次運行這條命令,你只需要把游標定位到這條命令所在行,刪除掉命令前面的 437 這個號碼,然後直接輸入回車,Emacs 會提你把它復制到正確的 shell 提示符後並且啟動執行。似乎這個方式描述起來並沒有 shell 本身提供的 !437 命令來的迅速,但是他畢竟提供了一個更加直觀的操作可能。另外,如果希望在運行之前對於這條命令進行一些修改,我指的是刪除,例如刪除掉某個參數,或者單詞,你也盡可以盡情刪除,然後在最終的刪除結果上面輸入回車,告訴 Emacs 去復制運行就是了。這個狀況目前似乎還沒有發現 ! 命令有可以搞定的可能。另外,如果希望在運行之前對於這條命令進行一些添加性質的修改,例如添加一些新的參數,或者把第 437 條命令中的 start 單詞刪掉,添加上 stop 單詞,在目前的 Emacs 裡面還沒有提供直接的支持。但是我們可以通過增加一步操作來實現它。第一步,讓我們首先把游標定位到第 437 條命令的位置,然後輸入回車,這個時候命令不會成功運行,一行提示信息 bash: 437: command not found 會顯示在你的 shell 提示符下面。沒關系,讓我們稍微修改一下剛剛運行失敗的這條命令。重新定位游標到剛剛執行過的這條命令所在的行,然後把命令中的 start 參數修改為 stop 參數,並且刪除命令前面的 437 這個號碼,再次輸入回車,修改之後的命令就會成功運行了。這里增加的第一步操作實際上代替了通常情況下需要的拷貝粘貼操作,拷貝和粘貼事實上是交由 Emacs 替我們實現了。 圖9 第三個小技巧,整理你的屏幕 在前面講到生活舒適度話題的時候,我們曾經提到過在 Emacs 裡面使用 shell 的一個很常用的方法就是在屏幕上已有的命令上面稍作修改,或者直接回車來復用已經執行過的歷史命令。但是如果你所感興趣的命令因為種種原因已經不在當前屏幕顯示的范圍之內了,除了不斷的通過使用 Ctrl-r 組合鍵進行回朔查找以外,還有沒有什麼更方便的辦法呢?答案是有,而且還有不止一種選擇。如果在你的當前提示符和你感興趣的命令之間僅僅只是由於時間的關系隔著太多無關的命令記錄,那麼你盡可以簡單的將這些多餘的內容刪除掉就行了。不要擔心,這些內容僅僅只是在 *shell* 編輯緩沖區里的普通文本內容而已,將他們刪除和將一篇文檔裡面的文本刪除沒有什麼區別。如果這些中間的命令記錄並不是完全無用了,僅僅只是在現在這段時間不感興趣的話,你還可以選擇使用 hide-region-hide 命令將這些中間的命令記錄作為一個文本塊隱藏起來。這些隱藏起來的內容僅僅只是不再在屏幕上顯示而已,他們仍然存留在原有的編輯緩沖區裡面,以後當你再次需要他們的時候,可是使用 hide-region-unhide 命令再把他們重新顯示出來。還有一種情況就是僅僅因為你剛剛執行了一個產生大量輸出的命令而已,比如說使用 cat 命令書出了一個較大的日誌文件,從而導致你感興趣的歷史命令被日誌文件的內容沖出了當前屏幕顯示範圍,這個時候只需要輸入 Ctrl-c Ctrl-o 組合鍵,將剛剛執行過的那條命令的屏幕輸出清除掉就是了。通常我在每次 cat 日誌文件或者列出一個含有較多文件的目錄之後都會使用 Ctrl-c Ctrl-o 組合鍵來清理一下我的屏幕。 最後我們再來說一個非常有用的小技巧,使用縮寫詞 Emacs 的強大的縮寫詞(abbrev)功能,這些縮寫詞功能同樣可以應用到 Emacs 當中的 shell 環境里來。通常在使用 Emacs 便寫文章的時候,我們會使用縮寫詞功能來減少頻繁輸入冗長的單詞或者語句時候的擊鍵次數,或者使用縮寫詞功能避免一些可能的拼寫錯誤。當我們在 Emacs 裡面使用 shell 的時候,我們同樣可以使用縮寫詞功能來縮寫一些冗長的命令,路徑,和避免一些常見的輸入錯誤,這樣在每天的工作當中會為我節省大量的擊鍵次數。有些讀者看到這里一定會想到 shell 本身提供的別名(Alias)功能也能完成命令的縮寫,但是,別名功能有很多局限性。首先,別名功能縮寫的命令只能通過別名單獨引用,無法和其他 shell 命令一同組合運行。例如我可以定義一個別名來進入常用的 IBM Tivoli Monitoring 產品的安裝目錄,alias cditm=』cd /opt/IBM/ITM』, 然後輸入 cditm 執行這條命令來進入 IBM Tivoli Monitoring 產品的安裝目錄。但是我不能夠定義一個別名來縮寫這個目錄本身,alias itmm=』/opt/IBM/ITM』, 然後輸入 cd itmm 執行這條命令來進入這個目錄,或者輸入 itmm/bin/cinfo –r 來直接引用該目錄下的可執行文件。還有一個問題,通過別名定義的命令縮寫只能夠直接引用執行,沒有可能對於很多相似的命令定義通用的一個「別名模板」,然後每次使用的時候引用模板,然後稍作修改之後運行。例如啟動 Omegamon XE for Messaging 產品中的 MQ Monitoring agent 的常用命令,bin/itmcmd agent –o QM_101 start mq。我可以把它定義為一個別名,alias strkmq_QM101=』bin/itmcmd agent –o QM_101 start mq』, 但是事實上每次在啟動一個 MQ Monitoring Agent 的時候,其中的隊列管理器(Queue Manager)的名稱都是不同的,我不可能為每一個隊列管理器都定義一個單獨的別名。況且還有其他的 agent,這樣的話別名的數量將會相當可觀。Emacs 的縮寫詞功能在這里提供了兩步走的設計方法,避免了以上提到的所有問題。讓我們還是以上面提到的目錄和命令的兩個例子來了解一下在 Emacs 裡面如何使用縮寫詞功能來解決這些問題。首先是常用目錄的縮寫詞定義。在 shell 提示符下輸入 cd /opt/IBM/ITM 命令,不用專門為了縮寫詞去輸入這條命令,就在你日常工作當中需要的時候輸入就是了,只是記得先不要輸入回車,然後,讓我們數一數究竟有多少個單詞將被包含在這個縮寫詞定義當中,在這里是 3 個單詞,分別是 opt, IBM 和ITM,現在輸入 Ctrl-u 3 Ctrl-x a l 組合鍵,稍微有點兒復雜,我在這里簡單解釋一下,Ctrl-u 在Emacs 裡面是一個非常有用的組合鍵,它代表一個通用前綴,通常在後面跟一個數字參數,表示隨後輸入的命令將被重復多少單元,在這個例子里是 3 個單元,後面的 Ctrl-x a l 組合鍵代表在當前主模式下添加縮寫詞定義(add-mode-abbrev)命令,其中的 l 代表將該縮寫詞的定義添加到當前的主模式中,如果希望這個縮寫詞定義在任何主模式下都可以使用,那麼將組合鍵中的 l 替換成 g,即 Ctrl-x a g, 代表add-global-abbrev 命令。然後,在提示緩沖區確認定義無誤之後,輸入希望的縮寫單詞,itmm,即可完成縮寫詞定義。 圖10 接下來我們來使用這個縮寫詞。例如我們需要進入到 IBM Tivoli Monitoring 產品的安裝目錄,在 shell 提示符下輸入 cd /itmm 加空格,你會發現 Emacs 立刻將這條命令擴展成為 cd /opt/IBM/ITM 顯示在剛才的輸入位置。現在我們要執行 IBM Tivoli Monitoring 產品目錄下的 cinfo 可執行程序,在 shell 提示符下輸入 /itmm 加空格,Emacs 立刻將這條命令擴展成為 /opt/IBM/ITM 顯示在剛才的輸入位置,然後我們只需要輸入一個退格鍵刪掉剛才那個空格,繼續在後面輸入 bin/cinfo –r 就可以了。事實上由於在我的工作當中 , 對於cinfo 命令來說,-r 這個參數非常常用,所以在我的 Emacs 里,bin/cinfo –r 已經被縮寫成了 rcinfo 這個縮寫詞了。那麼在我的 Emacs 裡面我只需要輸入 /itmm 空格鍵,退格鍵和 rcinfo 就可以實現完整的 /opt/IBM/ITM/bin/cinfo –r 這條命令了。 再下來我們來看看啟動 MQ Monitoring Agent 的命令的縮寫詞。在 shell 提示符下輸入 bin/itmcmd agent –o start mq 命令,注意,在–o 參數後面沒有提供隊列管理器的名字。因為每次執行這條命令的時候,隊列管理器的名字都有可能變化,因此我們不把它定義到縮寫詞內部。輸入 Ctrl-u 6 Ctrl-x a l 組合鍵,然後,在提示緩沖區確認定義無誤之後,輸入希望的縮寫單詞,strkmq 即可完成縮寫詞定義。 圖11 現在讓我們來使用這個縮寫詞。首先我們需要使用 itmm 這個縮寫詞進入到 IBM Tivoli Monitoring 產品的安裝目錄,然後,在 shell 提示符後面輸入 strkmq 空格,Emacs 立刻將這條命令擴展成為 bin/itmcmd agent –o start mq 顯示在剛才的輸入位置,現在移動游標到–o 參數後面,輸入隊列管理器的名稱並且回車,你就會看到希望的命令得到運行。 發明一個完美無缺的 shell 是一件相當困難的事情,但是將現有的資源整合起來卻會產生很多意想不到的效果。

閱讀全文

與emacs命令退出相關的資料

熱點內容
嵌入式py編譯器 瀏覽:318
rplayer下載安卓哪個文件夾 瀏覽:296
安卓手機里的電子狗怎麼用 瀏覽:748
pythonspyder入門 瀏覽:764
趣質貓app是什麼 瀏覽:59
皮帶壓縮機經常吸不上 瀏覽:205
西部隨行版怎樣加密 瀏覽:996
釘釘上如何壓縮圖片 瀏覽:924
cad輸入命令不顯示窗口 瀏覽:618
小米視頻加密之後怎麼看 瀏覽:76
超級程序員劉芳閱讀 瀏覽:833
顧家九爺在哪個app 瀏覽:820
我的世界怎麼在聯機大廳做伺服器 瀏覽:290
分手程序員 瀏覽:447
php將html導出為word 瀏覽:801
騰訊加密視頻能破解嗎 瀏覽:1007
反編譯後導入eclipse 瀏覽:948
買阿里雲伺服器有郵箱嗎 瀏覽:825
pdf卡片2004 瀏覽:309
e算量加密鎖檢測不到 瀏覽:777