emacs經常使用操做筆記

Table of Contents

emacs操做

emacs ecb 經常使用操做

與文件操做有關的命令

C-x C-f 查找文件而且在新緩衝區中打開
C-x C-v 讀入另外一個文件替換掉用C-x C-f打開的文件
C-x i 把文件插入到光標的當前位置
C-x C-s 保存文件
C-x C-w 把緩衝區內容寫入一個文件
C-x C-c 退出Emacs
C-u C-x s 保存所有緩衝區 !!!!!!!!!!!!!!!!!html

與光標移動操做有關的命令

C-f 光標前移一個字符(右)
C-b 光標後移一個字符(左)
C-p 光標前移一行(上)
C-n 光標後移一行(下)
M-f 前移一個單詞
M-b 後移一個單詞
C-a 移動到行首an
C-e 移動到行尾
M-e 前移一個句子
M-a 後移一個句子
M-} 前移一個段落
M-{ 後移一個段落
C-v 屏幕上卷一屏
M-v 屏幕下卷一屏
C-x ] 前移一頁
C-x [ 後移一頁
M-< 前移到文件頭
M->; 後移到文件尾
C-l 從新繪製屏幕,當前行放在畫面中心
C-u n 重複執行n次後續命令
按下M-x後在輔助輸入區中輸入"goto-line"跳到指定的行,輸入"goto-char"跳到指定的字符java

與文件刪除操做有關的命令

C-d 刪除光標位置上的字符
DEL 刪除光標前面的字符
M-d 刪除光標後面的單詞
M-DEL 刪除光標前面的單詞
C-k 從光標位置刪除到行尾
M-k 刪除光標後面的句子
C-x DEL 刪除光標前面的句子
C-y 恢復被刪除的文本或者粘貼最近刪除或複製的文本
C-w 刪除文件塊
C-u 0 C-k 刪除從光標位置到行首
按下M-x後在輔助輸入區中輸入"kill-paragraph"刪除光標後面的段落,按下"backward-kill-paragraph"刪除光標前面的段落linux

與文本塊操做有關的命令

C-@ 標記文本塊的開始(或結束)位置
C-x C-x 互換插入點和文本標記的位置
C-w 或 SHIFT-DEL 刪除文本塊
M-w 複製文本塊
M-h 標記段落
C-x C-p 標記頁面
C-x h 標記整個緩衝區c++

與位置交換操做有關的命令

C-t 交換兩個字符的位置
M-t 交換兩個單詞的位置
C-x C-t 交換兩個文本行的位置
按下M-x後在輔助輸入區中輸入"transpose-sentences"交換兩個句子的位置,按下"transpose-paragraph"交換兩個段落的位置git

與改變字母大小寫操做有關的命令

M-c 單詞首字母改成大寫
M-u 單詞的字母所有改成大寫
M-l 單詞的字母所有改成小寫github

與查找操做相關的命令

C-s 向前遞增查找
C-r 向後遞增查找
C-s C-w 開始遞增查找,把光標位置的單詞作查找字符串
C-s C-y 開始遞增查找,把光標位置到行尾之間的文本作查找字符串
C-s M-y 開始遞增查找,將clipboard的內容做爲查找字符串
C-s return searchstring return 向前開始非遞增查找操做
C-r return searchstring return 向後開始非遞增查找操做
C-s return C-w 向前開始單詞查找(不受換行符、空格、標點符號影響)
C-r return C-w 向後開始單詞查找(不受換行符、空格、標點符號影響)正則表達式

與使用編輯緩衝區和窗口有關的命令

C-x b 若是輸入一個新的文件名則新建一個文件而且編輯,不然打開該文件
C-x s 保存所有緩衝區
C-x k 刪除緩衝區
M-x rename-buffer 重命名當前緩衝區
C-x C-q 把當前編輯緩衝區設置爲只讀屬性
C-x 0 刪除當前所在的窗口
C-x 1 當前緩衝區滿屏顯示
C-x 2 建立上下排列的窗口
C-x 3 建立左右排列的窗口
C-x o 在窗口之間移動
C-x ^ grow window taller
C-x { shrink window narrower
C-x } grow window widershell

EMACS經常使用模式

C和C++模式編程

= 指定爲C++模式的方法 =windows

通常根據擴展名自動設定,不用指定,不過有時候若但願.h文件是C++模式的(缺省是C模式),在文件第一行(或其末尾)上加入

// -*- C++ -*-

= 語法高亮 =

不是C模式專有,M-x global-font-lock-mode RET 或在.emacs中加入(global-font-lock-mode t)。

= 子模式 =

auto-state 輸入時自動縮進,自動換行

hungry-state Backspace時,自動刪除儘量多的空白和空行

C-c C-t 同時轉換(開/關)auto-state和hungry-state子模式

C-c C-a 轉換 auto-state 子模式

C-c C-d 轉換 hungry-state 子模式

= 編輯命令 ==

C-c . 設置縮進風格(按TAB鍵可列出可用的風格,缺省的爲gnu,其縮進爲2個字符;linux爲8個;k&r爲5個,java爲4個)

TAB 從新縮進當前行

C-M-\ 自動補齊(緩衝區中能找獲得的串)

M-; 行尾加入註釋

C-c C-e 擴展宏

C-c C-c 註釋掉整個區域

C-u C-c C-c 取消註釋

C-c C-\ 將區域中的每一行結尾都加入一個'\'字符

C-M \ 自動縮進所選區域
C-c \\調出拼音輸入法

= 編譯和調試 ==

M-x compile RET 編譯

M-x gdb RET 調試

C-x ` (出錯信息中)下一個錯誤,一個窗口顯示錯誤信息,另外一個顯示源碼的出錯位置

C-c C-c 轉到出錯位置

啓動gdb調試器後,光標在源碼文件緩衝區中時:

C-x SPC 在當前行設置斷點

C-x C-a C-s step

C-x C-a C-n next

C-x C-a C-t tbreak

C-x C-a C-r continue

Dired模式

經常使用命令:

m : mark

u : unmark

d : mark delete

D : 當即刪除

x : 執行刪除

g : refresh

C : copy

R : move

  • : 建立目錄

Hideshow minor mode

在編程時能夠隱藏函數的實現。M-x hs-minor-mode

(setq hs-minor-mode-prefix [(contrl o)]) 能夠改變複雜的命令前綴.

用法:

`C-c @ C-h' : Hide the current block (`hs-hide-block').

`C-c @ C-s' : Show the current block (`hs-show-block').

`C-c @ C-c' : Either hide or show the current block (`hs-toggle-hiding')

`C-c @ C-M-h' : Hide all top-level blocks (`hs-hide-all').

`C-c @ C-M-s' : Show everything in the buffer (`hs-show-all').
十六進制模式

查看文本的十六進制編碼

M-x hexl-mode

C-c C-c 退出十六進制模式

ECB快捷鍵

C-c . g d 目錄列表窗口
C-c . g s 源碼窗口
C-c . g m 方法和變量窗口
C-c . g h 歷史窗口
C-c . g l 最後選擇過的編輯窗口
C-c . g 1 編輯窗口1
C-c . g n 編輯窗口n
C-c . l c 選擇版面
C-c . l r 重畫版面
C-c . l t 拴牢版面(鎖定版面)
C-c . l w 拴牢可見的ecb窗口
C-c . \ 拴牢編繹窗口

生成TAGS和cscope files文件的命令

find . -name "*.[ch]" -print > cscope.files
find . -name "*.asm" -print -o -name "*.inc" -print | etags -

find . -name "*.[ch]" -print -o -name "*.s" -print | etags -
find c:/msys64/usr/include -name "*.[ch]" -print -o -name "*.s" -print | ctags -

find . -name "*.asm" -print -o -name "*.[sch]" -print > cscope.files
find . -name "*.cpp" -print -o -name "*.cc" -print -o -name "*.[sch]" -print > cscope.files
find . -name "*.asm" -print -o -name "*.[sch]" -print > gtags.files
生成數據索引
cscope -bkq

內核索引命令

find ./block ./certs ./crypto ./drivers ./firmware ./fs ./include ./init ./ipc ./kernel ./lib ./mm ./net ./security ./sound ./usr ./virt ./arch/arm/boot ./arch/arm/common ./arch/arm/configs ./arch/arm/crypto ./arch/arm/ ./arch/arm/firmware ./arch/arm/include ./arch/arm/kernel ./arch/arm/kvm ./arch/arm/lib ./arch/arm/mach-zynq ./arch/arm/mm ./arch/arm/net ./arch/arm/nwfpe ./arch/arm/probes ./arch/arm/vdso ./arch/arm/vfp ./arm/xen -name "*.asm" -print -o -name "*.[sch]" -print > cscope.files

find ./common ./cyclonessl ^
./cyclonecrypto ./cyclonetcp ^
./demo/common/freertos ./demo/common/microchip^
./demo/microchip/iotethernetkit ./demo/microchip/pic32mzefstarterkit^
-name "*.asm" -print -o -name "*.[sch]" -print > gtags.files

//cscope經常使用快捷鍵
C-c s s Find symbol.
C-c s d Find global definition.
C-c s g Find global definition (alternate binding).
C-c s G Find global definition without prompting.
C-c s c Find functions calling a function.
C-c s C Find called functions.
C-c s t Find text string.
C-c s e Find egrep pattern.
C-c s f Find a file.
C-c s i Find files #including a file.

gdb使用相關的注意事項

注意:使用gdb時,須要添加相應的頭文件。
開啓/關閉多窗口
M-x gdb-many-windows
恢復到gdb原窗口布局
M-x gdb-restore-windows

/-—————————————
list
從第一行開始列出源碼(默認10行)
l
l 3 (開始行)

/-—————————————
break

設置斷點。兩可使用「行號」「函數名稱」「執行地址」等方式指定斷點位置。其中在函數名稱前面加「*」符號表示將斷點設置在「由編譯器生成的prolog代碼處」。若是不瞭解彙編,能夠不予理會此用法。

b <行號>
b <函數名稱>
b *<函數名稱>
b *<代碼地址>
/-—————————————
run
開始調試程序
r
/-—————————————
continue
繼續執行被調試程序,直至下一個斷點或程序結束。
c
/-—————————————
clear
刪除特定行的斷點
clear <行號>
/-—————————————
delete
刪除斷點,編號從1開始
d <編號>
/-—————————————
next line
執行一行源程序代碼,此行代碼中的函數調用也一併執行。
n
/-—————————————
step line
執行一行源程序代碼,若是此行代碼中有函數調用,則進入該函數 s
/-—————————————
until
結束當前循環
until
/-—————————————
print
能夠檢查各個變量的值,數組的值,以及函數等
print p (p爲變量名)
print $1 ($1爲歷史記錄變量,在之後能夠直接引用 $1 的值)
顯示數組: p <數組名>
顯示數組元素:p <*數組指針>
顯示數組int a[N]的特定值:

① p *a@10
② p (int )*10
/-—————————————
whatis
能夠顯示某個變量的類型
whatis p
/-—————————————
info
用於顯示各種信息
如: info b 顯示斷點信息
info r 寄存器信息
info local 顯示當前函數中的局部變量信息
info prog 顯示被調試程序的執行狀態
quit 退出gdb調試 q
/-—————————————
/-———————————————
/-———————————————

emacs help 幫助文檔

"M-x describe-variable", 快捷鍵"C-h v", 查看變量的文檔
"M-x describe-function", 快捷鍵"C-h f", 查看命令的文檔
"M-x describe-key", 快捷鍵 "C-h k", 查看快捷鍵的文檔

emacs中的編碼問題

/-——————————————————
set-buffer-file-coding-system : utf-8 將當前文檔的編碼方式指定爲utf-8編碼
describe-coding-system: 顯示當前文檔的編碼格式,及默認格式
/-——————————————————

ediff經常使用命令—快捷鍵

n比較當前已經打開的2個文件緩衝區A/B中的文件內容。文件內容不一致的行(或不一致的上下行、多行)或做爲一個差別區域,高亮顯示。
A或B窗口中顯示的增量部分,將顯示爲紅色;若是將A的增量替換到B窗口後,B中的替換增長部分會顯示爲綠色。
A與B窗口同一行或多行有差別時,A與B的窗口都將加上白色高亮背景;同時A窗口中字符顏色爲紅色,而B窗口字符顏色爲藍色(估計是綠色加上白色背景後的重疊,等於藍色了)
用按鍵j或者n/p移動光標至差別區域後,差別區域將顯示爲黃色背景,在增量窗口的另外一端(實在想不出用啥詞語來描述:一個窗口爲增量,另外一個窗口即所指),會在缺失行的行首第1字符顯示爲黃色背景,以做對比、便於查看。

M-x ediff-buffers
首先分別標記A/B緩衝名字,標記好後,在上面窗口中顯示爲A,下面窗口顯示爲B

基本操做按鍵以下:

將顯示窗口切換爲左右/上下(默認爲上下分隔)

? 對比模式下的幫助窗口
q 退出對比模式
v/V 屏幕上/下滾屏幕(前進/後退)
j 移動至第一個差別區域處
n/p 上/下一個不相同處(快進到上/下一個'差別處')
</> 移動光標到行首/行尾
h 高亮顯示差別內容
@ 自動定位光標,移動光標至內容不一致的區域(差別中的某個單詞做爲高亮顯示)
a/b 在差別行:將A/B中的內容替換至B/A中(複製A/B行至B/A,後者被替換)
在a/b行替換時,若是差別僅僅是空白區域不一致,即文字內容一致時,
將不會進行替換。替換後,能夠逆操做,以下ra/rb。
ra/rb在上面的行差別替換後的恢復操做(逆操做):
ra 即恢復A窗口中的替換; rb爲恢復B窗口中的替換
替換與恢復能夠交替、反覆操做(互逆)。

  • 從新??????當前差別區域??????

    ! 更新差別區域

    忽略空白字符(以前應先打開自動定位光標@)

    f/#h 顯示/隱藏差別區域(與空白字符差別有關)??????

    wa/wb 保存a/b窗口的文件
       標記有??????的幾個地方暫沒有搞清楚:-)
    //-——————————————————

Yasnippet的使用

/–——————————————————
/
–——————————————————

Ace jump mode

「C-c SPC」 ⇒ ace-jump-word-mode
enter first char of a word, select the highlight key to move to.
「C-u C-c SPC」 ⇒ ace-jump-char-mode
enter a char for query, select the highlight key to move to.
「C-u C-u C-c SPC」 ⇒ ace-jump-line-mode
each non-empty line will be marked, select the highlight key to move to.
//-———————————————————————

expand region

快捷鍵 C-= 從選中位置往外擴
C-M-h 選中一個函數
C-M-SPC 日後標記
//-———————————————————————
交換兩個buffer的內容
C-9
//–——————————————————————

宏的使用

錄製宏 start C-x (
stop C-x )
使用宏 C-x e 利用C-u 重複使用宏的次數 eg: C-u 100 C-x e 重複100次使用的宏 接着輸入e 將重複
保存宏
M-x name-last-kbd-macro
插入宏 M-x insert-kbd-macro
//-———————————————————
C-x C-q 切換文件/buffer是隻讀仍是編輯
//-———————————————————

CUA 操做

直接輸入字符: 在每行前(或後)都插入這個字符
[M-a]: 將rect中的文字左對齊
[M-b]: 用空格(tabs或者spaces)替換全部rect中的字符
[M-c]: 去掉全部行左側的空格
[M-f]: 用單個字符替換全部rect中的字符(提示輸入一個字符)
[M-i]: 對每行中第一個找到的數字進行加1操做(自動把0x開頭的看成十六進制數字)
[M-k]: 剪切rect
[M-l]: 把rect中的內容所有轉換爲小寫
[M-m]: 拷貝rect
[M-n]: 用一串自增的數字替換rect中的每一行(這個功能能夠用來給每行編號)
[M-o]: rect的內容右移,選中的rect用空格填充
[M-r]: 用字符串替換符知足正則表達式的字符串
[M-R]: 上下反轉
[M-s]: 把rect中的每一行替換爲一個字符串(提示輸入)
[M-t]: 把rect整個替換爲一個字符串(提示輸入)
[M-u]: 把rect中的內容所有轉換爲大寫
[M-|]: 對rect執行一個shell命令

grep查找

默認狀況下,grep會在當前文件所屬的目錄下查找,

grep -nH -e "ngxhttpssl" *.c 會在當前目錄的全部.c文件中查找ngxhttpssl出現的地方

grep -nHr -e "iscanLEDDPdynamic" * 在當前目錄下遞歸查找含有該字符串的文件

使用快捷鍵時,可能會出現無效的狀況,注意區分大小寫

init.el更新

init.el文件中更新上一次的更改,將鼠標放在該行的末尾,使用eval-last-sexp命令進行更新

git/magit經常使用命令

用戶名修改

git remote remove origin
git remote add origin https://e66:5989488zhang@github.com/e66/.emacs.d.git

注意事項

有時候不支持中文
與.git 在一樣的文件夾下添加.gitignore放置untracked文件

常見錯誤

git push origin master報錯

fatal: could not read Username for 'https://github.com': No such file or directo

  1. 解決方法:

    在.git/config文件中找到[remote "origin"],在URL中作修改
    url = https://e66:5989488zhang@github.com/e66/.emacs.d.git

git push 可能不能順利上傳

  1. 解決方法

    先git pull,而後再git push 或者merge

添加用戶名

git config –global user.name "e66"
git config –global user.email "e665106@126.com"

magit使用步驟(遠程管理)

先C-x g進入magit status

而後S(大寫)進行更新

而後c c進行commit,若是沒有更新會提示Nothing staged

填寫註釋,C-c C-c保存

P p進行推送

magit使用步驟(本地管理)

使用magit-init創建.git

先C-x g進入magit status

而後S(大寫)進行更新

而後c c進行commit,若是沒有更新會提示Nothing staged

填寫註釋,C-c C-c保存

使用magit-log查看修改的版本ID

magit-reset-hard ID恢復到那個版本

emacs使用中的問題

emacs使用中鼠標失靈

鼠標左鍵操做失靈,重啓電腦便可解決。

emacs中添加環境變量,不能加空格。

c++ c mode 中關於C-M使用

在一句話的兩頭添加引號

選中該區域,而後按下該符號便可

交互查找和替換多個文件中的字符串

1.Call dired to list files in dir, or call find-dired if you need all sub directories;

2.Mark the files you want. You can mark by regex by typing 【% m】.

3.Type Q to call 「dired-do-query-replace-regexp」.

4.Type your find regex and replace string.

5.For each occurrence,

  • y to replace
  • n to skip
  • Ctrl+g to abort the whole operation
  • ! to replace all occurrences in current file without asking
  • N to skip all possible replacement for rest of the current file
  • YTo do the replacement on all files without further asking
  • Call ibuffer to list all opened files. Type * u to mark all unsaved files, type S to save all marked files, type D to close them

Astyle 格式化代碼使用

遞歸格式化命令

astyle –style=allman –recursive /home/user/project/*.cpp /home/user/project/*.h

windows下批量格式化命令

for /R %f in (.cpp;.c;*.h) do astyle –style=allman -S -p -F -xg -xe "%f"

linux

astyle –options="D:/program files/emacs/bin/AStyle/astylerc.opt" -r *.c *.h

org-mode 使用

emacs實如今另一個窗口中打開當前buffer的內容

C-x 5 2

emacs org 模式,導出html後直接打開,使用C-c C-e h o

補丁和打補丁

diff

diff -uN test0 test1 >test1.patch
經過比較test0 test1 生成test1的補丁文件,eg:假設test0 是一箇舊文件,而後test1是一個新文件

patch

對test0打補丁,讓test0的內容變爲test1,名字仍是test0
patch -p0 <test1.patch
patch -RE -p0<test1.patch 將打過補丁的test0還原

emacs若是打開保存桌面保存的功能,會致使變慢

msys相關的操做

plink使用方法

C-x C-f /e66@remoteip:/home/username

在當前文件夾及子文件夾下查找.svn文件夾並遞歸刪除

find . -name '.git' -type d | xargs rm -rf
find . -name '.git' | xargs rm -rf

Footnotes:

1

DEFINITION NOT FOUND.

相關文章
相關標籤/搜索