vendredi 30 avril 2010

Emacs 入门 — 基础键盘命令/快捷键和注意事项

with 2 comments

阅读前请先记住以下几点:

解说按键组合命令时除 CONTROL / META / EDIT / ALT / SHIFT 等键需按住不放外, 其余按键无特别说明均需释放. C-v 表示按住 CONTROL 不放再按下 v, 然后松开; C-u 10 C-f 表示 按下 C-u 后松开, 输入 10, 再按下 C-f 后松开.
用 < > 包裹的一般指英文和标点字符按键或特殊名称, 常用按键如 CONTROL, SHIFT 直接大写处理.
指按下回车键. 为任意字符, 如 “a”, “b”, “g”, 标点, 区分大小写.
N 指任意数字.
命令中需要输入的名字或路径均不需要引号 (”", ”) 包裹住, 如 C-x C-f C:\test.txt 打开 C:\test.txt, 路径根据平台特性输入.
以下内容基于 Windows 平台, Emacs 大部分特性与平台无关, 有区别的多数在操作上, 如组合键.
基础知识:

Emacs 键盘命令 (即快捷键) 通常是以以下方式来组合:

C- 和 M-

C 即 CONTROL 键.
M 即 META / EDIT / ALT 键, 三键效果相同, 亦可以按一下 ESC 键后放开模拟 META 键, 如 C-M-v 等效于 ESC C-v. META 键组合的执行的操作一般是 CONTROL 键组合的反向操作.
通常组合键都有对应的命令名, 如 C-h ? 打开帮助列表 等效于 M-x help, M-% 替换模式 等效于 M-x query-replace.
大部分时候都可以使用 来补全命令名, 文件名等等, 如果没有唯一的补全项, 则会新打开一个窗格显示以关键字为开头的命令列表.

命令集扩展:

C-x 字符扩展, 用于和字符或组合键组合命令, 如 C-x C-f 打开文件

M-x 命令扩展, 用于执行特定命令. 如 M-x set-language-environment 设定语言环境, 输入完命令名需要按 执行.

C-x C-c 退出 Emacs

C-z 挂起 Emacs, 以便使用 shell.

Win 图形界面版效果为最小化 Emacs; 控制台下为挂起 emacs, 根据系统支持决定, 返回命令一般为 “fg” 或 “%emacs”, 不提供挂起功能的系统, 会在 Emacs 下创建子 shell, 使用 “exit” 回到 Emacs

文件和缓冲区:

C-x C-f 寻找文件.

底部 minibuffer 区会显示 Find file: , 可以自定输入完整路径, 如 D:\test.txt, 也可以输入目录路径, 如 D:\, Emacs 会列出目录, 在这个窗口里可随意浏览硬盘. 如果输入文件名后, 指定路径不存在该文件, 则在 buffer 区创建, 保存后才正式创建文件. 可以直接使用 C-x C-f 打开其他文件, Emacs 会自动创建新 buffer, 不会替换掉已打开文档, Emacs 是 “强制” 多文档同时编辑.

C-x C-s 保存当前文件.

默认会创建备份, 使用 M-x customize-variable make-backup-files 关闭备份.

C-x s 保存所有文件, 会逐个询问是否保存.

C-X C-b 列出缓冲区列表.

通常缓冲区内的名字和文件名一致, *Messages* 等缓冲区是系统缓冲区.

C-x b 跳转到已打开的指定文件.

M-x recover-file 从指定自动保存文件中恢复原有进度.

先打开原始文件再使用此命令, 自动保存文件名字一般为 “#file name#“

在开始编辑文档前, 请记住以下命令:

M-x set-default-font 设置默认字体.

字体名可以简写, 如 tahamo, 宋体, Emacs 会自动搜索, 如果输入 <->, 则会有一个超详细的字体列表. Emacs 理论上不存在乱码问题, 各类编码文档可直接打开, 如果遇到乱码, 请选择合适的字体.

M-x set-language-environment 设置语言环境.

通常会自动检测 OS 环境, 有特殊需要可更改, 直接输入 English 等即可.


状态栏和回显区:

打开文件后可看到 Emacs 底部有一个区域, 如下:

前面 “–\—” 是文件编码相关, 接着是文件名, “Top” 是光标所在文章的位置, 一般用 “NN%” 显示, 末尾是 “Bot”, 一屏显示完毕的显示 “All”, “(CSS)” 是编辑模式, 缺省是 “Fundamental”, 属于主模式, 通常根据设置会自动选择对应模式, 比如 “CSS”, 每个模式都有不同的改变, 如代码高亮, 缩进, 折叠等.

M-x 切换主模式.

除了主模式, 还有辅模式, 属于扩展功能, 可随意开启关闭, 用来起辅助作用, 比如:
M-x auto-fill-mode 自动折行, 会根据上下文对文章自动折行, 如:

The difference between “killing” and “deleting” is that “killed” text
can be reinserted (at any position), whereas “deleted” things cannot be reinserted in this way
(you can, however, undo a deletion–see below).

启用自动折行后:

The difference between “killing” and “deleting” is that “killed” text
can be reinserted (at any position), whereas “deleted” things cannot
be reinserted in this way (you can, however, undo a deletion–see below).

默认自动折行边界为70个ASCII字符, 在这里需要注意, 一个中文字会处理为双字符, 达到指定字符数后, 会根据最后一个词决定折行方式, 通过以下命令可以更改边界值:

C-u C-x f 修改边界值为 N.

M-q 对光标所在的段落或选择内容进行手动折行.

更改边界值或修改段落中间后, Emacs 不会自动折行, 需要手动折行.

Emacs 自带的主模式均可自动识别, 非自带的需要自己添加并设置, 普通编辑用 “Fundamental” 足够, 自然语言文本编辑可用 “Text”.

在文字中移动:

C-p 光标向上移动移动.
C-n 光标向下一行移动
C-b 光标向左移动.
C-f 光标向右移动.

以上四个命令是以一个字符为单位 — 无论中英文/标点/换行符等均算一个字符.

M-f 如果光标停在一个词中间, 移动到词尾; 如果位于词与词之间的空白处, 移动到下一个词的末尾.

M-b 与 M-f 相反.

词的定义通过标点, 特殊字符 (如空格) 区分, 无法识别中文的词, 直接跳到下一标点/特殊字符.

C-a 移动到行首.
C-e 移动到行尾.
M-a 移动到句首.
M-e 移动到句尾.

C-a 和 C-e 到行首或行尾时均不会再移动, 而 M-a 和 M-e 如果已在行首或行尾时, 会向上或向下移动, 直到找到新的句首或句尾.

M-< / M-SHIFT-, 移动到文件头, 注意是 , 英文逗号.

M-> / M-SHIFT-. 移动到文件尾, 注意是 . 英文句号.

C-v 向下滚动一个屏幕, 效果与 PageDown 相同.

M-v 向上滚动一个屏幕, 效果与 PageUp 相同.

C-l 重绘屏幕, 并把光标所在行置于屏幕中央. 注意是小写 L 非 I.

编辑文档:

插入文字直接敲键盘即可, 无需像 Vim 一样切换模式.

C-u N 插入 N 个 .

/ ENTER 插入换行符.

删除光标前的一个字符.

通常有三种标示: DELETE, DEL 或 BACKSPACE, 如果存在 BACKSPACE, 那 DEL 和 DELETE 都不是 .

C-d 删除光标后的一个字符.

M- 移除光标前的一个词, 若该词尾包括标点, 连同标点一起移除.

M-d 移除光标后的一个词, 若该词首包括标点, 连同标点一起移除.

C-k 移除光标到行尾的字符.

M-k 移除光标到句尾的字符.

“M-k: Kill to the end of the current sentence“, 这是官方的解释, 而实际判断标准却有点奇怪, 句子很好地匹配到句尾的 “。”, 但是对于英文则直接移除从光标所在处开始搜索行尾是否有结束标点 (”.”, “?”), 并移除到匹配为止的所有行, 如:

This’s first sentence. This’s second sentence
for the test. This’s third sentence.
This’s fourth sentence.

假设光标在开头处, 因为 “second sentence” 行尾没有结束标点, Emacs 搜索第二行, 在 “thrid sentence.” 处找到结束标点, 移除后结果为 (粗体部分被移除):

This’s fourth sentence.

即使使用 M-x set-language-environment: English 修改语言环境为英文也仍然如此.

C-@ (C-SHIFT-2) / C-SPACE 进入 Mark set 状态.

此状态将光标所在处标记为起点, 移动光标即可选择区域. C-g 可中止区域选择, 但起点仍然存在.

C-w 移除已选区域的内容.
M-w 复制已选区域的内容.

C-w 和 M-w 需配合 C-@ 使用, 只要有起点的存在, 即使不在 Mark set 状态, 也会自动复制/移除起点到光标所在处的内容.

C-y 召回被移除内容.
M-y 召回 buffer 内之前被移除的内容. 此命令接着 C-y 使用, 不能单独使用.

注: 移除 (kill) 和 删除 (delete) 是 Emacs 里很特别的一个定义, kill 会把内容复制到 Emacs 的 buffer 和电脑内存 (比如 Win 的剪贴板) 里再删除内容, 就像剪切, 而 delete 就纯粹是删除, 内容和 buffer 都不会有记录. 在 buffer 的内容可通过 C-y & M-y 复制到其他地方, 召回顺序由最近移除的开始, 比如按顺序移除了 B, C, A 三段内容, C-y 召回 A 内容, 接着使用 M-y 召回 C 内容, 再使用一次 M-y 召回 B 内容.

C-_ (C-SHIFT–) / C-x u undo, 只针对改变了文字的命令; 对输入的字符以组为单位撤销, 每组20个字符, 中文字是一个字符.

C-s 从光标所在处起向前搜索.
C-r 从光标所在处起向后搜索.
C-M-S 从光标所在处起向前查找正则表达式.
C-M-r 从光标所在处起向后查找正则表达式.

Emacs 是即时搜索, 会高亮关键字, 再次按 C-s / C-r 会跳到下一个匹配项, 当光标不在第一个匹配项时, &ltDelback> 会返回上一个匹配项直至到达第一个匹配项, 此时再按下 则会逐字符删除关键字. 使用 结束搜索, 光标停留在搜索结果上, 可用 C-g 终止搜索, 但光标返回搜索开始时的位置, 搜索时输入某些 C / M 命令会导致搜索结束.
注: 某些终端下, C-x C-s 会冻结屏幕, 使用 C-q 可以解除冻结, Emacs 手册 “Spontaneous Entry to Incremental Search” 一节有介绍.

替换模式和递归编辑:

M-% (M-SHIFT-5) 进入替换模式.

M-% (query-replace) from-string to-string &optional delimited start end, y 为替换; n 为不替换当前目标转到下一目标; q 为退出; C-r 进入递归编辑, 下方主模式显示变化, 如 (CSS) -> [(CSS)], 在递归编辑, 可以修改文档, 但替换模式没有退出, 按下 C-M-c 或 ESC ESC ESC 后回到替换模式; C-w 删除当前匹配项并进入递归编辑; ! 不询问直接替换所有匹配项; ^ 移动光标到上一匹配项; E 修改 to-string, 按下 进行替换.

多窗格编辑:

C-x 1 将屏幕恢复为 1 个窗格, 保留显示光标所以在的文档, 其他文档保留在 buffer 里.

部分命令会新建窗格, 通过激活需保留的窗格后使用 C-x 1 关闭不要的窗格.

C-x 2 将屏幕水平划分为 2 个窗格.

C-x 3 将屏幕垂直划分为 2 个窗格.

C-x o 切换到其他窗格.

在每个窗格里也可以继续划分窗格, 使用 C-x b 或者 C-x C-f 即可同一屏幕编辑多个文档.

C-x o 切换顺序由上至下和由左至右, 先算了水平窗格内的垂直窗格再向下, 无论划分顺序如何.

C-u N C-x o 按顺序切换 N 次窗格.

C-M-v 滚动当前窗格下一个窗格的屏幕.

其他命令:

C-u 为 Emacs 命令指定数字参数.

大部分命令把数字参数解释为重复次数, 如 C-u 8 C-f 会向前移动8个字符, 但部分命令是会改变命令原本的功能, 比如 C-u 2 C-v 不会执行两次向下滚动一个屏幕命令, 而是向下滚动2行.

C-g 取消已输入但未执行的命令; 终止正在执行的命令命令.

取消 ESC 需再次按两次 ESC, 因为 但按一次 ESC 效同 META, 再按 C-g 则等效于 C-M-g 默认未定义命令.

C-h t 显示当前 language-environment 对应的 tutorial, 入门指南.

C-h c 查询某个组合键的简要说明, 如 C-h c M-% 会显示 M-% runs the command query-replace.

C-h k 查询某个组合键的详细说明.

C-h a 搜索相关命令.

C-h i 阅读文档, 相当完善.

Emacs buffer和window相关问题

怎么才能知道Emacs中活动buffer的数量?有三种方法:buffer列表(键入C-x C-b时显示在一窗口中),Buffers菜单(它列出了活动的buffer和浏览这些buffer的命令),还有Buffer弹出菜单(按住Ctrl,单击鼠标左键访问,它根据模式列出buffer)。

Emacs会创建它自己的专用buffer。这些内部buffer的名字一般来说格式为 *buffer name* 。*Help*、*scratch*和*Buffer List*就是Emacs创建的其中一些buffer。

当你启动Emacs时,它会建立两个buffer:

*Messages*
*scratch*

*Messages* buffer存储了Emacs收集自它启动时从minibuffer里显示的消息;*scratch*是个临时的scratchpad(涂鸦板),以便你有地方输入东西。除非你使用C-x C-w明确的把它写到文件中,否则它不会被保存下来。

当然,一般来说你用Emacs编辑文件时,这些文件就会被拷贝到同名的buffer中。如果你需要获得帮助,则会进入 *Help* buffer。

能在Emacs里打开的buffer数量实际上没有限制。大多数情况下,只显示一个或两个buffer;不过即使你无法看到全部,你在某个Emacs会话里创建的buffer仍处于活动状态。你可以把这些buffer想象成一叠纸,只有放在最上面的那页才显示在你眼前。不过任何时候,你都可以翻到另一页(另一个buffer),或者也可以创建一个新页。

每个buffer都关联一个主模式(major mode),它决定了Emacs在这个buffer里的行为。例如,设计用来书写文本的文本模式(text mode),和Lisp模式的表现就不一样,后者被设计用来编写Lisp程序。

如何操作多个buffer

如果要新建包含一个文件的buffer,只需键入 C-x C-f 找到该文件。Emacs就会自动新建一个buffer并定位到该buffer。如果该文件已打开,C-x C-f 只是定位到已有buffer中,这一点很有意义,可以避免同一文件存在多个buffer导致混乱。如果键入 C-x C-f 后输入的文件名不存在,Emacs认为你想新建一个文件,并定位到一个空白buffer中。

C-x b:在多个buffer之间进行切换;键入命令后输入buffer名,回车。如果已存在该buffer,则切换到该buffer中;否则以输入的buffer名新建一个buffer,但是注意这个buffer并没有和文件相关,因此关闭Emacs,它不会给你任何提示。

C-mouse 1:按住Ctrl并单击鼠标左键,会弹出一个Buffer Menu,它会按主模式类型列出活动的buffer供你选择。

C-x ->(<-):按下C-x后(放开)再按向右(左)方向键可以定位到下(上)一个buffer中。

如何删除buffer

注意:如果你修改了一个buffer(且该buffer和一个文件相关),则Emacs会在删除buffer前询问你是否保存所做修改;如果这个buffer和文件不相关,则你在该buffer里所做任何修改都会丢失,Emacs认为你不在乎这些buffer因此不作任何提示。因此编辑重要的buffer之前最好先 C-x C-w 写到文件中,或者用 C-x C-f 新建buffer。

C-x k:kill-buffer命令,删除一个buffer;

M-x kill-some-buffers:删除一些buffer;

如果删除了当前会话里的所有buffer,Emacs会新建一个 *scratch* buffer,总得有个东西显示在屏幕上不是?:P

如何保存buffer

C-x C-s:保存当前buffer;

C-x s:即save-some-buffers命令,一次保存所有buffer;

如何重命名buffer

M-x rename-buffer:重命名buffer;

如何使buffer只读

C-x C-q:切换buffer的read-only和read-write状态;

buffer和window的关系

buffer和window并不是一一对应的,同一个buffer可以有多个window,比如你可以同时在多个window里查看同一buffer的不同部分。Mark是和buffer关联的;而point是和window关联的。

C-x 2:即split-window-vertically命令,水平切分窗口;

C-x 3:垂直切分窗口;

C-x 4 b(f):在另一个窗口选择另一个buffer(查找另一个文件),这样你可以不用切换到另一个window,就改变其buffer或打开文件;

C-M-v:滚动另一个window(C-v是滚动当前window);

C-x o:此处 o 表示other(其它),移动光标到另一个window;

C-x 0:删除当前所在的window;

C-x 1:删除当前所在window之外的所有window;

C-x 5 2:新建一个frame;

---------------------------------------------------------------------------------------------
文件和缓冲区:

C-x C-f 寻找文件.

底部 minibuffer 区会显示 Find file: , 可以自定输入完整路径, 如 D:\test.txt, 也可以输入目录路径, 如 D:\, Emacs 会列出目录, 在这个窗口里可随意浏览硬盘. 如果输入文件名后, 指定路径不存在该文件, 则在 buffer 区创建, 保存后才正式创建文件. 可以直接使用 C-x C-f 打开其他文件, Emacs 会自动创建新 buffer, 不会替换掉已打开文档, Emacs 是 “强制” 多文档同时编辑.

C-x C-s 保存当前文件.

默认会创建备份, 使用 M-x customize-variable make-backup-files 关闭备份.

C-x s 保存所有文件, 会逐个询问是否保存.

C-X C-b 列出缓冲区列表.

通常缓冲区内的名字和文件名一致, *Messages* 等缓冲区是系统缓冲区.

C-x b 跳转到已打开的指定文件.

M-x recover-file 从指定自动保存文件中恢复原有进度.

先打开原始文件再使用此命令, 自动保存文件名字一般为 “#file name#“

jeudi 29 avril 2010

vim

在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc

在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc

在终端 输入以下命令来编辑vimrc配置文件:
sudo vim /etc/vim/vimrc
或者 sudo gedit /etc/vim/vimrc

1、显示行号
在文件末端添加一新行,输入 set nu

2、语法高亮
在文件中找到 "syntax on 这一行,去掉前面的双引号",双引号是注释的意思

3、自动缩进

在文件末尾添加一行,输入 set autoindent
在添加一行,输入 set cindent
其中 autoindent 是自动缩进; cindent是特别针对 C语言语法自动缩

emacs使用心得

由于保存前去掉行末的空格,所以可以使用保存来去掉行末的空格,这样有利于快速找到行末。

;;保存前,删除当前buffer中行尾空格和TAB等whitespace
(add-hook 'before-save-hook 'delete-trailing-whitespace)

lundi 26 avril 2010

UE Fortran

/L10"Fortran" Line Comment = ! FORTRAN_LANG Nocase File Extensions = FOR INC SUB F f90
/Function String = "USE"
/Function String 1 = "PROGRAM"
/Function String 2 = "SUBROUTINE"
/Function String 3 = "FUNCTION"
/Function String 4 = "MODULE"
/Function String 5 = "CALL"
/C1
ABS AIMAG ACOS ADJUSTL ADJUSTR ASIN ATAN ANINT ALLOCATABLE ALLOCATE
CASE CHAR CHARACTER CLOSE COMMON CONTINUE COS COSH CALL
DABS DACOS DASIN DATA DATAN DCOS DCOSH DEXP DIMENSION DEALLOCATE DIM DLOG DLOG10 DMIN1 DMAX1 DMOD DO DSIGN DSIN DSINH DSQRT DTAN DTANH DOUBLE
ELSE ELSEIF END ENDIF ENDDO EXP EXTERNAL EXIT ERR
FABS FACOS FASIN FATAN FCOS FCOSH FEXP FLOG FLOG10 FMAX FMIN FORM FORMAT FSIGN FSIN FSINH FSQRT FTAN FTANH FILE
GOTO
IABS ICHAR IDINT IDNINT IF IMAX1 IMIN1 IMPLICIT INCLUDE INDEX INT INTEGER ISIGN
LOG LOG10 LOGICAL LGE LLE LEN LEN_TRIM
MAX MIN MOD
NONE NOT NINT
OPEN
PARAMETER PAUSE PRINT PRECISION
READ REAL RETURN
SELECT SIGN SIN SINH SQRT STOP SAVE STATUS SYSTEM
TAN TANH THEN TRIM
USE
WRITE WHILE
/C2
.D0
D0
FUNCTION
PROGRAM
MODULE
SUBROUTINE
&

/C3
+
-
* /
=

/C4
.FALSE.
.GE. .GT.
.LE. .LT.
.NE. .EQ.
.OR. .AND.
.TRUE.
.NOT.

/L11"DAT" Line Comment = ! FORTRAN_LANG Nocase File Extensions = dat
/Function String = "ZONE"

vendredi 23 avril 2010

Fortran error

LNK4084 error, "total image size exceeds max... image may not run"


256M image size 限制是windows操作系统造成的:

Windows 95 and NT 4.0 (prior to SP3) have a limit on the virtual address space of processes or applications of 256 MB. Windows XP/2000/NT 4.0 (SP3+)/Me/98 have a limit of 2 GB. For more information, including how to increase the limit to 3 GB, see Memory Support and Windows Operating Systems .
A program can contain a number of allocatable arrays that exceed the limit, as long as the total sizes of those that are allocated at any point during execution do not exceed the limit.

可能的解决问题的方法:
1.把静态内存分配改成动态分配;
2.有时把静态分配的数组加save属性也能解决问题;
3.操作系统升级;
4.增加物理内存数量;
5.修改程序,减少大数组的使用。

jeudi 22 avril 2010

Matlab help

rand('state',s)
表示随机产生数的状态state,一般情况下不用指定状态。但是有的书籍作者为了让读者能够看到和他书本的同样结果,采用了设置state,rand('state',0)作用在于如果指定状态,产生随机结果就相同了。

mercredi 21 avril 2010

mardi 13 avril 2010

linux 修改用户密码

passwd命令

出于系统安全考虑,Linux系统中的每一个用户除了有其用户名外,还有其对应的用户口令。因此使用useradd命令增加时,还需使用passwd命令为每一位新增加的用户设置口令;用户以后还可以随时用passwd命令改变自己的口令。

该命令的一般格式为: passwd [用户名] 其中用户名为需要修改口令的用户名。只有超级用户可以使用“passwd 用户名”修改其他用户的口令,普通用户只能用不带参数的passwd命令修改自己的口令。

该命令的使用方法如下:

输入

passwd<>;

在(current) UNIX passwd:下输入当前的口令

在new password:提示下输入新的口令(在屏幕上看不到这个口令):

系统提示再次输入这个新口令。

输入正确后,这个新口令被加密并放入/etc/shdow文件。选取一个不易被破译的口令是很重要的。

选取口令应遵守如下规则:

口令应该至少有六位(最好是八位)字符;

口令应该是大小写字母、标点符号和数字混杂的。

超级用户修改其他用户(xxq)的口令的过程如下,

# passwd root

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully