- 一、带有文件类型标记的目录列表
- ls -F | grep /$
- 查看当前目录下所有的目录
- ls -F | grep *$
- 查看当前目录下所有的可执行文件(包括二进制文件和脚本文件)
- ls -F
- 给打印出文件或目录标上文件类型的标记
- 二、unix下Vi操作中的宏命令
- 直接写个示例解释:
- qaddq 2@a;
- q表示进入录制模式,后面的a表示将录制的过程存入a命令,dd是具体的删除一行字符的命令,q表示录制结束,2@a表示执行刚刚录制的过程a两次。
- a这个生命周期是到下一次重新被定义的时候。
- 注意这里的
- q是按两次的,一次是录制开始,一次是录制结束,
- @是重新播放刚录制的操作过程。
- 三、下面是在命令模式下用来显示页面的子命令
- Ctrl + f向后滚一页。
- Ctrl + d向后滚半页。
- Ctrl + b向前滚一页。
- Ctrl + u向前滚半页。
- Ctrl + e屏幕向下滚一行。
- ctrl + g 取得正在编辑文件的有关信息。
- 一、指令模式下的指令
- ┌—————┬—————————————┬—————┐
- │指令 │说明 │功能键 │
- ├—————┼—————————————┼—————┤
- │0 │移动到游标所在列的最前面 │[Home] │
- ├—————┼—————————————┼—————┤
- │$ │移动到游标所在列的最後面 │[End] │
- ├—————┼—————————————┼—————┤
- │[CTRL][d] │向下半页 │ │
- ├—————┼—————————————┼—————┤
- │[CTRL][f] │向下一页 │[PageDown]│
- ├—————┼—————————————┼—————┤
- │[CTRL][u] │向上半页 │ │
- ├—————┼—————————————┼—————┤
- │[CTRL][b] │向上一页 │[PageUp] │
- └—————┴—————————————┴—————┘
- ┌——┬—————————————————┐
- │指令│说明 │
- ├——┼—————————————————┤
- │H │移动到视窗的第一列 │
- ├——┼—————————————————┤
- │M │移动到视窗的中间列 │
- ├——┼—————————————————┤
- │L │移动到视窗的最後列 │
- ├——┼—————————————————┤
- │b │移动到下个字的第一个字母 │
- ├——┼—————————————————┤
- │w │移动到上个字的第一个字母 │
- ├——┼—————————————————┤
- │e │移动到下个字的最後一个字母 │
- ├——┼—————————————————┤
- │^ │移动到游标所在列的第一个非空白字元│
- └——┴—————————————————┘
- ┌——┬———————————————————┐
- │指令│说明 │
- ├——┼———————————————————┤
- │n- │减号移动到上一列的第一个非空白字元 │
- │ │前面加上数字可以指定移动到以上 n 列 │
- ├——┼———————————————————┤
- │n+ │加号移动到下一列的第一个非空白字元 │
- │ │前面加上数字可以指定移动到以下 n 列 │
- ├——┼———————————————————┤
- │nG │直接用数字 n 加上大写 G 移动到第 n 列 │
- └——┴———————————————————┘
- ┌————┬———————————————┐
- │指令 │说明 │
- ├————┼———————————————┤
- │fx │往右移动到 x 字元上 │
- │Fx │往左移动到 x 字元上 │
- ├————┼———————————————┤
- │tx │往右移动到 x 字元前 │
- │Tx │往左移动到 x 字元前 │
- ├————┼———————————————┤
- │; │配合 f&t 使用,重复一次 │
- │, │配合 f&t 使用,反方向重复一次 │
- ├————┼———————————————┤
- │/string │往右移动到有 string 的地方 │
- │?string │往左移动到有 string 的地方 │
- ├————┼———————————————┤
- │n │配合 /&? 使用,重复一次 │
- │N │配合 /&? 使用,反方向重复一次 │
- └————┴———————————————┘
- ┌————┬———————————————————┬——————————┐
- │指令 │说明 │备注 │
- ├————┼———————————————————┼——————————┤
- │n( │左括号移动到句子的最前面 │句子是以 │
- │ │前面加上数字可以指定往前移动 n 个句子 │! . ? 三种符号来界定│
- │n) │右括号移动到下个句子的最前面 │ │
- │ │前面加上数字可以指定往後移动 n 个句子 │ │
- ├————┼———————————————————┼——————————┤
- │n{ │左括弧移动到段落的最前面 │段落是以 │
- │ │前面加上数字可以指定往前移动 n 个段落 │段落间的空白列界定 │
- │n} │右括弧移动到下个段落的最前面 │ │
- │ │前面加上数字可以指定往後移动 n 个段落 │ │
- └————┴———————————————————┴——————————┘
- 2、vi的基本操作
- a) 进入vi
- 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:
- $ vi myfile
- 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!
- b) 切换至插入模式(Insert mode)编辑文件
- 在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。
- c) Insert 的切换
- 您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。
- d) 退出vi及保存文件
- 在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
- : w filename (输入 「w filename」将文章以指定的文件名filename保存)
- : wq (输入「wq」,存盘并退出vi)
- : q! (输入q!, 不存盘强制退出vi)
- 3、命令行模式(command mode)功能键
- 1). 插入模式
- 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
- 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
- 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
- 2). 从插入模式切换为命令行模式
- 按「ESC」键。
- 3). 移动光标
- vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
- 按「ctrl」+「b」:屏幕往“后”移动一页。
- 按「ctrl」+「f」:屏幕往“前”移动一页。
- 按「ctrl」+「u」:屏幕往“后”移动半页。
- 按「ctrl」+「d」:屏幕往“前”移动半页。
- 按数字「0」:移到文章的开头。
- 按「G」:移动到文章的最后。
- 按「$」:移动到光标所在行的“行尾”。
- 按「^」:移动到光标所在行的“行首”
- 按「w」:光标跳到下个字的开头
- 按「e」:光标跳到下个字的字尾
- 按「b」:光标回到上个字的开头
- 按「#l」:光标移到该行的第#个位置,如:5l,56l。
- 4). 删除文字
- 「x」:每按一次,删除光标所在位置的“后面”一个字符。
- 「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。
- 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。
- 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。
- 「dd」:删除光标所在行。
- 「#dd」:从光标所在行开始删除#行
- 5). 复制
- 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
- 「#yw」:复制#个字到缓冲区
- 「yy」:复制光标所在行到缓冲区。
- 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
- 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
- 6). 替换
- 「r」:替换光标所在处的字符。
- 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
- 7). 回复上一次操作
- 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
- 8). 更改
- 「cw」:更改光标所在处的字到字尾处
- 「c#w」:例如,「c3w」表示更改3个字
- 9). 跳至指定的行
- 「ctrl」+「g」列出光标所在行的行号。
- 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
- 4、Last line mode下命令简介
- 在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。
- A) 列出行号
- 「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。
- B) 跳到文件中的某一行
- 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。
- C) 查找字符
- 「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
- 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
- D) 保存文件
- 「w」:在冒号输入字母「w」就可以将文件保存起来。
- E) 离开vi
- 「q」:按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!」强制离开vi。
- 「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
- 5、vi命令列表
- 1、下表列出命令模式下的一些键的功能:
- h
- 左移光标一个字符
- l
- 右移光标一个字符
- k
- 光标上移一行
- j
- 光标下移一行
- ^
- 光标移动至行首
- 0
- 数字“0”,光标移至文章的开头
- G
- 光标移至文章的最后
- $
- 光标移动至行尾
- Ctrl+f
- 向前翻屏
- Ctrl+b
- 向后翻屏
- Ctrl+d
- 向前翻半屏
- Ctrl+u
- 向后翻半屏
- i
- 在光标位置前插入字符
- a
- 在光标所在位置的后一个字符开始增加
- o
- 插入新的一行,从行首开始输入
- ESC
- 从输入状态退至命令状态
- x
- 删除光标后面的字符
- #x
- 删除光标后的#个字符
- X
- (大写X),删除光标前面的字符
- #X
- 删除光标前面的#个字符
- dd
- 删除光标所在的行
- #dd
- 删除从光标所在行数的#行
- yw
- 复制光标所在位置的一个字
- #yw
- 复制光标所在位置的#个字
- yy
- 复制光标所在位置的一行
- #yy
- 复制从光标所在行数的#行
- p
- 粘贴
- u
- 取消操作
- cw
- 更改光标所在位置的一个字
- #cw
- 更改光标所在位置的#个字
- 2、下表列出行命令模式下的一些指令
- w filename
- 储存正在编辑的文件为filename
- wq filename
- 储存正在编辑的文件为filename,并退出vi
- q!
- 放弃所有修改,退出vi
- set nu
- 显示行号
- /或?
- 查找,在/后输入要查找的内容
- n
- 与/或?一起使用,如果查找的内容不是想要找的关键字,按n或向后(与/联用)或向前(与?联用)继续查找,直到找到为止。
第四部分:
- VI高级命令集锦及VIM应用实例
- 1.交换两个字符位置
- xp
- 2.上下两行调换
- ddp
- 3.把文件内容反转
- :g/^/m0
- 4.上下两行合并
- J
- 5.删除所有行
- dG
- 6.从当前位置删除到行尾
- d$
- 7.从当前位置复制到行尾
- y$ 如果要粘贴到其他地方 p 就可以了
- 由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态
- 8.
- :ab string strings
- 例如 ":ab usa United States of America" ,
- 当你在文见里插入 usa 时
- United States of America 就蹦出来了
- 9.
- :map keys new_seq
- 定义你当前 键盘命令
- 10.
- :set [all]
- vi or ex 的编辑状态
- 如 显示每行 :set nu
- 11.
- 在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的下面。
- 12.
- 单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S
- 13.
- :%s/old_word/new_word/g
- 这个指令是于在整个文件中替换特定字符串
- 14.光标控制
- k:上移 nk 上移n行
- j:下移 nj 下移n行
- 将光标移到第n行,按下 mk
- 将光标移到第m行,按下 "ay'k
- 即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
- 这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用
- 想粘贴到某处,直接将光标移到某地,按下 'ap 即可,以此类推,b,c........寄存器等
- 在当前屏幕中
- H 跳到第一行
- M 跳到中间一行
- L 跳到最后一行
- 15.
- 表8-2 删除命令
- 删除命令操作
- d l 删除当前字符(与x命令功能相同)
- d 0 删除到某一行的开始位置
- d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
- d w 删除到某个单词的结尾位置
- d 3 w 删除到第三个单词的结尾位置
- d b 删除到某个单词的开始位置
- d W 删除到某个以空格作为分隔符的单词的结尾位置
- d B 删除到某个以空格作为分隔符的单词的开始位置
- d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
- d) 删除到某个语句的结尾位置
- d 4) 删除到第四个语句的结尾位置
- d( 删除到某个语句的开始位置
- d } 删除到某个段落的结尾位置
- d { 删除到某个段落的开始位置
- d 7 { 删除到当前段落起始位置之前的第7个段落位置
- d d 删除当前行
- d /t e x t 删除从文本中出现" t e x t"中所指定字样的位置,一直向前直到下一个该字样所出现的
- 位置(但不包括该字样)之间的内容
- d fc 删除从文本中出现字符"c"的位置,一直向前直到下一个该字符所出现的位置(包括
- 该字符)之间的内容
- d tc 删除当前行直到下一个字符" c"所出现位置之间的内容
- D 删除到某一行的结尾
- d $ 删除到某一行的结尾
- 5 d d 删除从当前行所开始的5行内容
- d L 删除直到屏幕上最后一行的内容
- d H 删除直到屏幕上第一行的内容
- d G 删除直到工作缓存区结尾的内容
- d 1 G 删除直到工作缓存区开始的内容
- 修改命令操作
- c l 更改当前字符
- c w 修改到某个单词的结尾位置
- c 3 w 修改到第三个单词的结尾位置
- c b 修改到某个单词的开始位置
- c W 修改到某个以空格作为分隔符的单词的结尾位置
- c B 修改到某个以空格作为分隔符的单词的开始位置
- c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置
- c 0 修改到某行的结尾位置
- c) 修改到某个语句的结尾位置
- c 4) 修改到第四个语句的结尾位置
- c( 修改到某个语句的开始位置
- c } 修改到某个段落的结尾位置
- c { 修改到某个段落的开始位置
- c 7 { 修改到当前段落起始位置之前的第7个段落位置
- c tc 修改当前行直到下一个字符c所出现位置之间的内容
- C 修改到某一行的结尾
- c c 修改当前行
- 5 c c 修改从当前行所开始的5行内容
- .重复上一次修改!
- 表8-4 替换命令
- 替换命令操作
- s 将当前字符替换为一个或多个字符
- S 将当前行替换为一个或多个字符
- 5 s 将从当前字符开始的5个字符替换为一个或多个字符
- vi替换使用规则:
- :g/s1/s/s2/s3/g
- 第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
- s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串
- 16.
- fx
- 往右移动到 x 字符上
- Fx
- 往左移动到 x 字符上
- tx
- 往右移动到 x 字符前
- Tx
- 往左移动到 x 字符后
- (注意:以上四个命令中,其中x是键入的字符)
- ;
- 分号,配合 f 和 t 使用,重复一次
- ,
- 逗号,配合 f 和 t 使用,反方向重复一次
- 17. vi 环境选项 Solaris ksh
- noautoindent nomodelines noshowmode
- autoprint nonumber noslowopen
- noautowrite nonovice tabstop=8
- nobeautify nooptimize taglength=0
- directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags
- noedcompatible prompt tagstack
- noerrorbells noreadonly term=vt100
- noexrc redraw noterse
- flash remap timeout
- hardtabs=8 report=5 ttytype=vt100
- noignorecase scroll=11 warn
- nolisp sections=NHSHH HUuhsh+c window=23
- nolist shell=/bin/ksh wrapscan
- magic shiftwidth=8 wrapmargin=0
- mesg noshowmatch nowriteany
- For C-Shell:
- setenv EXINIT "set nu"
- For Bourne or Korn Shell:
- EXINIT="set nu"; export EXINIT
- For Korn Shell Only (alternate method):
- typeset -x EXINIT="set nu"
- 在 .profile 里设置 vi 的环境选项 , 以上均测试过
- 18.标记文本
- mchar
- 用字母char标记当前光标的位置
- `char
- 移至char所标记处
- 'char
- 移至char标记所在行的开头处
- "
- 移至当前行上一次所在位置(在光标移动之后)――一个双引号
- ''
- 移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
- 19.
- 同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi的文件之间切换。
- 但是我发现一个BUG:在用CTRL-SHIFT-6切换到上一个文件后,用:args查看多文件vi状态时,
- 屏幕底部仍然显示目前vi的是刚才的文件。
- (在HP-UX,Solaris,AIX上通过)
- 也可以使用:
- :e#
- 进行切换
- 20.
- sco 下VI 要在文本前同样的字符加用
- %s/^/要加的内容/g 要在文本后同样的字符加
- %s/$/要加的内容/g
- 21.
- 如何去掉文本中的 ^M 硬回车?不必用binary传回去再ascii传回来的方式,用shell或者unix语句实现。
- cat filename |tr -d '\\015' >newfile
- 不同的unix系统还存在一些其他不同的命令,如:doscp
- sed 也可以实现这个功能.
- dos2unix filename filename2
- 反之
- unix2dos filename filename2
- 在vi 中用:$s/^M//g
- ^是crtl-V crtl-M
- 22.如何在"unix命令行"下将一个文件的某字符串用另一个串换掉
- sed 's/string1/string2/gp' file1 > file2
- 23.将/etc/hosts下所有的地址都ping 2次
- 1 #/usr/bin/sh
- 2 #grad /etc/hosts and ping each address
- 3 cat /etc/hosts|grep -v '^#' | while read LINE
- 4 do
- 5 ADDR=`awk '{print $1}'`
- 6 for MACHINE in $ADDR
- 7 do
- 8 ping $MACHINE -n 2
- 9 done
- 10 done
- 24
- 到前一个函数[[ ,到下一个函数]] ,括号配对% ,交叉参考Ctrl_] (事先用ctags做索引),回来用e# ` 编辑一个函数:vi -t 函数名 ,编辑加密文本vi -X
- 25
- 在插入模式下ctrl+p,自动补齐剩余单词,以赖规则:tags,以有的单词等等
- 当今世界,文本编辑器种类繁多,大有"乱花渐欲迷人眼"之势。中国有句古语:手巧不如家什妙,作为IT业的专业人士,选择一款优秀的编辑软件至关重要。笔者认为:LINUX下的VIM※以其强大的功能和无穷的魅力将使您终生受益。
- 作者:闫石 (iloveibm@163.com)
- 来自:http://www-900.ibm.com/developerWorks/cn/linux/l-tip-prompt/tip15/index.shtml
- 由于被广泛移植,无论是PC机的DOS和WINDOWS,还是RISC/6000的AIX,乃至于IBM的大型机S/390,都能见到VIM的身影。然而,对于初学者,VIM的用户界面与使用方法非常不符合常规,甚至认为它比较混乱,无所适从。事实上,VIM编辑器是专门为经验丰富的用户设计的,它的界面和使用方法提供了更快的速度和更强的功能。对于熟知它的用户,VIM的许多特性节省了时间和击键次数,并可以完成一些其他编辑器无法完成的功能。
- 学习的最好方法是实践,唯有如此,才能真正掌握其中的精髓。文中列举的实例,都是笔者在实际工作中遇到的,具有一定的代表性,请大家在阅读的过程中仔细体会。
- 好了,现在让我们共同畅游神奇的VIM的世界!
- 例一、两个常用的指令序列
- xp 左右交换光标处两字符的位置。
- ddp 上下交换光标处两行的位置。
- 例二、重复输入同一字符
- 有时,我们可能想多次输入同一字符,VIM的插入功能可以很好的完成这项工作
- 命令 80i=^ESC 一次可以输入80个字符= ,当然,80a=^ESC 也可以完成上述功能。
- 请注意:此处的^ESC表示键盘左上方上的ESC键。
- 上面的这几个实例,展示了VIM强大的文本处理功能,但这远不能覆盖其全貌。VIM的命令很多,而且使用灵活,需要狠下一番气力才能熟练掌握。笔者年龄尚小,经验还很欠缺,希望本文能够起到抛砖引玉的作用。由于时间的原因,上述实例仅在DOS和WINDOWS环境下测试,没有在其他系统下进行进一步的测试,希望各位同行、前辈不吝赐教,谢谢!
- ※ VIM 意为 VI Improved ,与VI99%向下兼容。而且,VIM提供了许多VI不具备的功能,内置了诸多函数,因此,建议有经验的VI用户对VIM有所了解,您会发现,转向VIM 是明智之举。欲查询有关VIM的资料,请参考 http://www.vim.org