EMACS快速入门

简介
emacs 是Unix上的编辑器佼佼者,在命令列上打个”emacs”就好了,一上来只是提示,
你要先开个新档并且给档名才会到这个档的编辑缓冲区(buffer)。另外如果不想用 window模式,例如有时网络很慢,或者没有X的显示允许权,可以用emacs -nw启动 terminal模式。
其实在X下他也有选单(menu)可以用,不需要背命令,背那些热键(Hotkey),虽然我 有一些朋友就这样用,不过我还是要说这样无法发挥他应有的功能。由于来往两个 模式太麻烦,所以我们有热键这个东西,在文字输入模式下,按个热键就可以完成 一些需要打入命令的事情来。热键多用几次,其实就也忘不了了。
有些键其实初学者已经不需要记了,例如往左往右这种键,这是为了有些键盘没 有上下左右Page up/Page down等等。当然玩的越熟,你才会喜欢往左往右一些用 Ctrl组合成的键。因为你的手指一直在asdfjkl;上面。
基本热键
这边先列出常用的基本热键﹔
档案
C-x C-c :离开 emacs
C-x C-f :开档
C-x C-s :存档
C-x C-w :另存新檔

光标移动:
C-a :移到行首
C-e :移到行尾
M-f :向后移一个字
M-b :向前移一个字
HOME :移到档头
END :移到檔尾
M-m :移到这行第一个字符

常用的键
M-x :执行一个emacs命令
C-g :离开一个emacs命令
C-_ :UNDO
C-s :搜寻  一直按一直往下找
M-% :搜寻与替代(按!全部换掉,要不,会一个一个问按y/n回答)
M-C-s :regular express 搜寻

M-DEL :往前砍个字
M-d :往后砍个字
C-k :砍掉游标后所有字
M-t :转换两字
C-x C-t :转换两行

区块: 一般说来在X 窗口下,我们可以用鼠标就可以标示文字了, 但是在X下面我们不用copy/paste了,只要用鼠标左键标好,然后用鼠标中 键就可以paste了。emacs的区块没有所谓的column mode的区块。
C-SPCE = C-@ :开始区块标示,然后移动光标
:如果想看到反白请先下emacs 命令”transient-mark-mode”
:但如果用了这个,鼠标的左键标示就看不到反白了喔。
C-x h :标示整个编辑区(就是整个档案)
C-w :砍掉标示的区块(用鼠标右键按两下或按del – 这个要20版以上的才有)
C-y :把刚刚砍掉的或在区块中的文字回存(也可以用鼠标中键)

多档与多窗
C-x 5 2 :开一个新窗子在新的frame
C-x 3 :开新垂直窗子在同一个frame
C-x 1 :只留一个窗子
C-x o :改到其它(other)窗子
C-x b :改到其它buffer(编辑区)
C-x k :kill掉目前编辑区
C-x C-b :列出所有编辑档案

基本宏
C-x ( :开始纪录你所按的键
C-x ) :结束你所纪录的键
C-x e :执行刚刚纪录的所有组合按键
M-n C-x e :执行n遍刚刚的按键

TAB :对齐indent
M-C- :对区块做一次程序的对齐(indent)

TAB的奥妙
其实TAB在命令缓冲区(叫minibuffer,不过不管在vi还是emacs,我们不要局限于 那些专有名词,只要捉住要领,就好像vi里面文字模式叫insert mode,不用刻意 去记)有非常多的好用,例如忘了某个命令或档名,只要多打几下TAB他就会秀出 可能的所有命令与档名。试试看先按M-x进入命令缓冲区,打个open-file,这个 就是上面热键的C-x C-f,然后按TAB键。开档其实也可以不给档名,直接按”.” 就会秀出目前目录的所有文件,按老鼠中键去选择。
emacs设定档
$HOME/.emacs是emacs 的设定档,它其实是像一种宏程序(虽然它不是), emacs读这些文稿式的程序,来做一些设定,所以其实强大的emacs是由一些已经 针对一些需求写好的一堆文稿程序所组成。这种script其实是一种叫Lisp的程序。 如果有用过pe2的人应该会记得你可以改编一些功能在pe2.pro。这个LISP在 emacs里面也有这样的功能,只是更为强大。强大到可以拿emacs来写mail,读 news,做版本控制等等。因为他也有定义变量,循环,条件等等功能。在 /usr/share/emacs/version/下面有一些伴随emacs的.el档,就是这些档案让emacs 变成无敌超人的。通常你是看到一些*.elc档案,这些是所谓的emacs byte-code檔 ,emacs内部有个compiler可以将.el档编译成.elc档,跑起来比较快。通常安装 时只会安装elc檔而已了。emacs在每次启动时会自动读你的.emacs檔。 以下我们会来试着设定一些emacs内定的一些变量命令让他有些生命。

3 ways of appending string to char

Solution 1: sprintf

 

/* sprintf example */
#include <stdio.h>

int main ()
{
  char buffer [50];
  int n, a=5, b=3;
  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
  printf ("[%s] is a string %d chars long\n",buffer,n);
  return 0;
}

Solution 2: asprintf

/* asprintf example */
#include <stdio.h>

int main ()
{
  char buffer [50];
  int a=5, b=3;
  n=asprintf (&buffer, "%d plus %d is %d", a, b);
  printf ("[%s] is a string\n",buffer);
  return 0;
}

 

Solution 3:

/* sprintf example */
#include <stdio.h>

int main ()
{
  char buffer [50];
  int n, a=5, b=3;
  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
  printf ("[%s] is a string %d chars long\n",buffer,n);
  return 0;
}