Vi编辑器的基本使用方法

vi分为三种状态: 命令模式(Command mode):控制光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式和底行模式; 插入模式(Insert mode):只有在此模式下才可以做文字输入,按「ESC」回到命令行模式; 底行模式(Last line mode):将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等。
进入vi 在系统提示符号$下输入vi myfile,就进入vi全屏幕编辑画面。初态为:命令模式。只有插入模式才能够输入文字。
1、插入模式的命令简介
在「命令模式」下:
按「i」切换进入插入模式后从光标当前位置开始输入文字;I从光标所在的列的第一个非空白字符前面开始插入文字。
按「a」进入插入模式后从光标所在位置的下一个位置开始输入文字;A从光标所在列最后面的地方开始新增资料。
按「o」进入插入模式后并插入新的一行,从行首开始输入文字;O从光标所在列上方新增1列并进入插入模式。
在「插入模式」下只能一直输入文字,如果输错了字则只能按「ESC」转到「命令模式」来删除。
2、命令模式的命令简介
移动
  vi用小写英文字母「h」、「j」、「k」、「l」分别控制光标左、下、上、右移一格。
  按「ctrl」+「b」:屏幕往“后”移动一页
  按「ctrl」+「f」:屏幕往“前”移动一页
  按「ctrl」+「u」:屏幕往“后”移动半页
  按「ctrl」+「d」:屏幕往“前”移动半页
  按「0」:移到文章的开头
  按「G」:移动到文章的最后
  按「$」:移动到光标所在行的“行尾”
  按「^」:移动到光标所在行的“行首”
  按「w」:光标跳到下个字的开头
  按「e」:光标跳到下个字的字尾
  按「b」:光标回到上个字的开头
  按「#l」:光标移到该行的第#个位置,如:5l, 56l
删除
  「x」:每按一次,删除光标所在位置的“后面”一个字符
  「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符
  「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
  「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
  「dd」:删除光标所在行
  「#dd」:从光标所在行开始删除#行
复制
  「yw」:将光标所在之处到字尾的字符复制到缓冲区中
  「#yw」:复制#个字到缓冲区
  「yy」:复制光标所在行到缓冲区
  「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字
  「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能
替换
  「r」:替换光标所在处的字符
  「R」:替换光标所到之处的字符,直到按下「ESC」键为止
恢复
  「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复
更改
  「cw」:更改光标所在处的字到字尾处
  「c#w」:例如,「c3w」表示更改3个字
跳行
  「ctrl」+「g」列出光标所在行的行号
  「#G」:例如,「15G」,表示移动光标至文章的第15行行首

对齐

     a.命令模式下:=:1,$

     b. gg(把关标定位到最上面),V(进入VISUAL模式),shift+g(选中整篇文本),然后=。

     c.gg=G

 

3、底行模式命令简介
在使用「 底行模式」之前,请记住先按「ESC」键确定您已经处于「 命令模式」下后,再按「:」冒号即可进入「 底行模式
a) 列出行号
 「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号
b) 跳到文件中的某一行
 「#」:「#」号表示一个数字,在冒号后输入一个数字,按回车键就会跳到该行,如输入数字15回车,就会跳到文章的第15行
c) 查找字符
 「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可一直按「n」往后寻找到您要的关键字
 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可一直按「n」往前寻找到您要的关键字
d) 保存文件
: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)
编辑器命令总汇(Emacs,Vim)
exit:                            C-x C-c          :qa /:wq /:xa /:q!
Get back/command mode:           C-g              <esc>
Backward(left):                  C-b              h
Forward(right):                  C-f              l
Next(down):                      C-n              j
Previous(up):                    C-p              k
stArt of line(^):                C-a              0
End of line($):                  C-e              $
mUltiple commands:               C-u nnn cmd      nnn cmd
Multiple commands:               M-digitkey cmd
save File:                       C-x C-s          :w file
beginning of buffer:             M-<              1G
end of buffer:                   M->              G
scroll forward 1 screen:         C-v              ^F
scroll forward 1/2 screen:                       ^D
scroll forward 1 line:                           ^E
scroll backward 1 screen:        M-v              ^B
scroll backward 1/2 screen:                      ^U
scroll backward 1 line:                          ^Y
scroll the other window:         M-C-v
delete under cursor:             C-d              x
delete from cursor to eol:       C-k              D
iSearch forward:                 C-s
isearch Reverse:                 C-r
Search forward:                  C-s enter        /
search Reverse:                  C-r enter        ?
isearch regexp:                  M-C-s
isearch backward regexp:         M-C-r
search regexp:                   M-C-s enter      /
search backward regexp:          M-C-r enter      ?
Help:                            C-h C-h          :help
Help Apropos:                    C-h a
Help key Bindings:               C-h b            :help [key]
Help Info:                       C-h i
Help Major mode:                 C-h m
Help tutorial:                   C-h t            :help howto
Undo:                            C-_              u
Redo:                            C-f              ^R
Mark cursor position:            C-@              m{a-zA-Z}
eXchange Mark and position:      C-x C-x
goto mark in current file:                       '{a-z}
goto mark in any file:                           '{A-Z}
copy region:                     M-w              {visual}y
kill region:                     C-w              {visual}d
Yank and keep buffer:            C-y              
Yank from kill buffer:           M-y              p
convert region to Upper:         C-x C-u          {visual}U
convert region to Lower:         C-x C-l          {visual}u
Insert special char:             C-q octalnum/keystroke   
^V decimal/keystroke
replace:                         M-x replace-string       :%s/aaa/bbb/g
replace regexp:                  M-x replace-regexp       :%s/aaa/bbb/g
query replace:                   M-%                      :%s/aaa/bbb/gc
query replace:                   M-x query-replace
query replace regexp:            M-x query-replace-regexp
Open file:                       C-x C-f          :r file
Save file:                       C-x C-s          :w
Save all buffers:                C-x s            :wa
Save as:                         C-x C-w file     :w file
Prompt for buffer:               C-x b
List buffers:                    C-x C-b          :buffers
Toggle read-only:                C-x C-q          :set ro
Prompt and kill buffer:          C-x k
Split vertical:                  C-x 2            :split
Split horizontal:                C-x 3            :vsplit (ver. 6)
Move to other window:            C-x o            ^Wp
Delete this window:              C-x 0            :q
Delete other window(s):          C-x 1            ^Wo
run shell in bg:                 M-x compile
kill shell run in bg:            M-x kill-compilation
run make:                                        :make Makefile
check error message:             C-x`             :echo errmsg
run shell and record:            M-x shell        :!script -a tmp
...clean BS, ...                                 :!col -b <tmp >record
...save/recall shell record:     C-x C-w record   :r record
run shell:                       M-! sh           :sh
run command:                     M-! cmd          :!cmd
run command and insert:          C-u M-! cmd      :r!cmd
run filter:                      M-| file         {visual}:w file
run filter and insert:           C-u M-| filter   {visual}:!filter
show option                                      :se[t] {option}?
reset option to default                          :se[t] {option}&
reset boolean option                             :se[t] no{option}
toggle boolean option                            :se[t] inv{option}
wrap text at column 72                           :se tw=72
do not wrap                                      :se tw=0
autoindent                                       :se ai
expand tab                                       :se et
specify comment (mail)                           :se comments=n:>,n:\|

run GDB                          M-x gdb                         
describe GDB mode                C-h m                           
step one line                    M-s
next line                        M-n
step one instruction (stepi)     M-i                             
finish current stack frame       C-c C-f                         
continue                         M-c                             
up arg frames                    M-u                             
down arg frames                  M-d                             
copy number from point, insert at the end 
C-x &                           
set break point                  C-x SPC

vim编辑二进制文件 Vim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读
取一个文件,改动一个字符,然后把它存盘。结果是你的文件就只有那一个字符给改了,
其它的就跟原来那个一模一样。
要保证 Vim 别把它那些聪明的窍门用错地方,启动 Vim 时加上 "-b" 参数:

vim -b datafile

这个参数设定了 'binary' 选项。其作用是排除所有的意外副作用。例如,'textwidth'
设为零,免得文本行给擅自排版了。并且,文件一律以 Unix 文件格式读取。

二进制模式可以用来修改某程序的消息报文。小心别插入或删除任何字符,那会让程序运
行出问题。用 "R" 命令进入替换模式。

文件里的很多字符都是不可显示的。用 Hex 格式来显示它们的值:

:set display=uhex

另外,也可以用命令 "ga" 来显示光标下的字符值。当光标位于一个 <Esc> 字符上时,
该命令的输出看起来就像这样:

<^[> 27, Hex 1b, Octal 033

文件中也许没那么多换行符。你可以关闭 'wrap' 选项来获得总览的效果:

:set nowrap


字 节 位 置

要发现你在文件中的当前字节位置,请用这个命令:

g CTRL-G

其输出十分冗长:

Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206

最后两个数字就是文件中的当前字节位置和文件字节总数。这已经考虑了 'fileformat'
选项导致换行符字节不同的影响。
要移到文件中某个指定的字节,请用 "go" 命令。例如,要移到字节 2345:

2345go


使 用 XXD

一个真正的二进制编辑器用两种方式来显示文本: 二进制和十六进制格式。你可以在 Vim
里通过转换程序 "xxd" 来达到这效果。该程序是随 Vim 一起发布的。
首先以二进制方式编辑这个文件:

vim -b datafile

现在用 xxd 把这个文件转换成十六进制:

:%!xxd

文本看起来像这样:

0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.

现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。
修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。
最后,用下面的命令把它转换回来:

:%!xxd -r

只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值