LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: home_king

Shell的命令行编辑[vi&emacs命令行技巧征集]

[复制链接]
发表于 2004-4-6 01:19:30 | 显示全部楼层

vim --help

  1. /home/javalee:vim --help
  2. VIM - Vi IMproved 6.1 (2002 Mar 24, compiled Aug 27 2002 19:07:13)
  3. 用法:vim [参数] [文件 ..]       编辑指定的文件
  4.    或:vim [参数] -               从标准输入(stdin)读取文本
  5.    或:vim [参数] -t tag          编辑时使用指定的 tag
  6.    或:vim [参数] -q [errorfile]  编辑时加载第一个错误
  7. 参数:
  8.    --                   只有在这之后的文件
  9.    -v                   Vi 模式 (同 "vi")
  10.    -e                   Ex 模式 (同 "ex")
  11.    -s                   安静 (batch) 模式 (只能与 "ex" 一起使用)
  12.    -d                   Diff 模式 (同 "vimdiff", 可迅速比较两文件不同处)
  13.    -y                   简易模式 (同 "evim", modeless)
  14.    -R                   只读模式 (同 "view")
  15.    -Z                   限制模式 (同 "rvim")
  16.    -m                   不可修改 (写入文件)
  17.    -M                   文本不可修改
  18.    -b                   二进制模式
  19.    -l                   Lisp 模式
  20.    -C                   'compatible' 传统 Vi 兼容模式
  21.    -N                   'nocompatible' 不完全与传统 Vi 兼容,可使用 Vim 加强能力
  22.    -V[N]                Verbose 等级
  23.    -D                   调试模式
  24.    -n                   不使用交换文件, 只使用内存
  25.    -r                   列出交换文件后退出
  26.    -r (加文件名)        恢复上次崩溃的资料(Recover crashed session)
  27.    -L                   与 -r 一样
  28.    -H                   Start in Hebrew mode
  29.    -F                   Start in Farsi mode
  30.    -T <terminal>        设定终端为 <terminal>
  31.    -u <vimrc>           使用 <vimrc> 替换任何 .vimrc
  32.    --noplugin           不加载任何 plugin
  33.    -o[N]                打开 N 个窗口 (预设是每个文件一个)
  34.    -O[N]                Like -o but split vertically
  35.    +                    启动后跳到文件结尾
  36.    +<lnum>              启动后跳到第 <lnum> 行
  37.    --cmd <command>      加载任何 vimrc 前执行 <command>
  38.    -c <command>         加载第一个文件后执行 <command>
  39.    -S <session>         加载第一个文件后载入 Session 文件<session>
  40.    -s <scriptin>        从 <scriptin> 读入一般模式命令
  41.    -w <scriptout>       对文件 <scriptout> 附加(append)所有输入的命令
  42.    -W <scriptout>       对文件 <scriptout> 写入所有输入的命令
  43.    -x                   编辑编码过的文件
  44.    -i <viminfo>         使用 <viminfo> 而非 .viminfo
  45.    -h                   Print Help (this message) and exit
  46.    --version            Print version information and exit
复制代码
用vi直接在命令行里修改文件:example:
  1. vim -e -s -c ":%s/aaa/bbb/g" -c ":wq!" filename
复制代码
ps:在bash里,用光标键真的很厉害 uparrow/downarrow翻阅历史文件,leftarrow/rightarrow移动,修改命令行里的命令,这一点要比ksh强多了 ;)
发表于 2004-4-6 01:22:16 | 显示全部楼层
嗯, javalee兄提到了命令补齐,我就象补充一下。并不是所由的ksh都能获得如javalee兄显示的效果。在AIX下, ksh的补齐功能就很差。命令的显示和补齐只能是当前目录或是已输入了路径的命令的补齐。不能向bash那样,只要是PATH路径中的命令都能补。不知道怎样配置才能到到Linux下ksh的效果。
发表于 2004-4-7 03:08:35 | 显示全部楼层
刚学到的:
tar cf >(gzip -v9cf >dir.tar.gz) dir/
发表于 2004-4-7 03:24:15 | 显示全部楼层
在ksh里,按一下ESC,再按ctrl+V,会出现ksh的版本 ;)
home/javaleeD KSH v5.2.14 99/07/13.2
 楼主| 发表于 2004-4-7 09:27:10 | 显示全部楼层
最初由 yongjian 发表
刚学到的:
tar cf >(gzip -v9cf >dir.tar.gz) dir/

这就是"进程替换"。
tar cf <target file> directorys
>(gzip -v9cf >dir.tar.gz)表示把tar cf将dir/打包后的输出连接到(gzip -v9cf >dir.tar.gz)这个子shell进程的输入中去。
发表于 2004-4-7 12:12:39 | 显示全部楼层
是的,home_king说的对。只是这种方法以前没有试过。现在正好有一个问题:如何将一段stdin同时写进几个文件?一个小练习,但是做了半天也没有做出来?不知bash是否能实现。要求是不用循环结构。(当然,用循环就不是问题了。)
比如:有a , b , c ,d 四个空文件,现在想把‘abcd’这段字窜通过一种方法同时并行写入这四个文件。怎么做?能不能实现?(看过home_king兄关于并行管道的大帖后想到的)
 楼主| 发表于 2004-4-7 12:32:19 | 显示全部楼层
无须使用进程替换。

  1. [root@home root]# echo abcd | tee a | tee b | tee c | tee d
复制代码

"进程替换"是有条件的,一定要匹配命令的参数。
如command arg1 arg2
则可以command <(prog1) <(prog2)
发表于 2004-4-7 21:38:50 | 显示全部楼层
谢谢了。原来是这样。不知这样的情况是否是并行管道的例子呢?
 楼主| 发表于 2004-4-7 21:45:10 | 显示全部楼层
我个人认为,"进程替换"也算是一种"并行管道",只不过是一种有限制的"并行管道"罢了。
<(list), >(list)中的list是一种"命名管道"。
发表于 2008-7-16 21:35:26 | 显示全部楼层
爱死你们了,尤其楼上的,解释的明白不象KornLee不给解释。
此外,林青霞的头像更是不一般  :)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表