vi总结

vi常用命令整理

★命令模式 

移动光标 

h 或 向左方向键(←) → 光标向左移动一个字元 

j 或 向下方向鍵(↓) → 光标向下移动一个字元 

k 或 向上方向鍵(↑) → 光标向上移动一个字元 

l 或 向右方向鍵(→) → 光标向右移动一个字元 

[Ctrl] + [f] → 屏幕『向下』移动一页,相当于 [Page Down]按键 

[Ctrl] + [ b ] → 屏幕『向上』移动一页,相当于 [Page Up] 按键 

n<space> → n 表示『数字』。按下数字后再按空白鍵,光标会向右移动这一行的 n 个字元 

0 → 数字『 0 』:移动到这一行的最前面字元处  

$ → 移动到这一行的最后面字元处 

G → 移动到这个文件的最后一行 

nG → n 为数字。移动到这个文件的第 n 行(可配合 :set nu) 

gg → 移动到这个文件的第一行,相当于 1G 

n<Enter> → n 为数字。光标向下移动 n 行 


查找与替换 

/word → 向光标之下查找一个名称为 word 的字符串。如想查找 eric4ever 字符串,输入 /eric4ever 即可 

?word → 向光标之上查找一个名称为 word 的字符串 

n → 『重复前一个查找的动作』 

N → 与 n 刚好相反,为『反向』进行前一个查找动作 

:n1,n2s/word1/word2/g → n1 与 n2 均为数字。在第 n1 与 n2 行之间查找 word1 字符串,并将该字符串替换为 word2。如:在 1 到 9 行之间查找 eric4ever 并替换为 ERIC4EVER 则:『:1,9s/eric4ever/ERIC4EVER/g』 

:1,$s/word1/word2/g → 从第一行到最后一行查找 word1 字符串,并将该字符串替换为 word2 

:1,$s/word1/word2/gc → 从第一行到最后一行查找 word1 字符串,并将该字符窗替换为 word2,替换前显示提示对话框是否确认替换 



删除、复制与粘贴 

x, X → 在一行字当中,x 为向后刪除一个字元 (相当于 [del] 按键), X 为向前刪除一个字元(相当于 [backspace] 按键) 

dd → 刪除光标所在的那一整列 

ndd → n 为数字。刪除光标所在的向下 n 列 

yy → 复制光标所在的那一行 

nyy → n 为数字。复制光标所在的向下 n 列 

p, P → p 为将已复制的内容粘贴在光标下一行上,P 则为粘贴在光标的上一行 

u → 还原前一个动作 

[Ctrl]+r → 重做上一个动作 

. → 小数点,意思是重复前一个动作 



★编辑模式 

i, I → 插入:在目前的光标所在处插入输入的文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一個非空白字元处开始插入』 

a, A → a 为『从目前光标所在的下一个字元处开始插入』, A 为『从光标所在行的最后一个字元处开始插入』 

o, O → o 为『在目前光标所在的下一行处插入新的一行』, O 为『在目前光标所在处的上一行插入新的一行』 

r, R → r 为『取代光标所在的那一个字元』, R 为『一直取代光标所在的文字,直到按下 ESC 为止』 

Esc → 退出编辑模式,回到一般模式中 


★末行指令模式 

:w → 将编辑的文件写入到硬盘上 

:q → 退出 vi 

:wq → 保存后退出,若为 :wq! 则为强制保存为退出 

:set nu → 显示行号 

:set nonu → 取消显示行号 
补充 
光标控制命令 


命令 光标移动 

h或^h 向左移一个字符 

j或^j或^n 向下移一行 

k或^p 向上移一行 

l或空格 向右移一个字符 

G 移到文件的最后一行 

nG 移到文件的第n行 

w 移到下一个字的开头 

W 移到下一个字的开头,忽略标点符号 

b 移到前一个字的开头 

B 移到前一个字的开头,忽略标点符号 

L 移到屏幕的最后一行 

M 移到屏幕的中间一行 

H 移到屏幕的第一行 

e 移到下一个字的结尾 

E 移到下一个字的结尾,忽略标点符号 

( 移到句子的开头 

) 移到句子的结尾 

{ 移到段落的开头 

} 移到下一个段落的开头 

0或| 移到当前行的第一列 

n| 移到当前行的第n列 

^ 移到当前行的第一个非空字符 

$ 移到当前行的最后一个字符 

+或return 移到下一行的第一个字符 

- 移到前一行的第一个非空字符 


在vi中添加文本 

命令 插入动作 

a 在光标后插入文本 

A 在当前行插入文本 

i 在光标前插入文本 

I 在当前行前插入文本 

o 在当前行的下边插入新行 

O 在当前行的上边插入新行 

:r file 读入文件file内容,并插在当前行后 

:nr file 读入文件file内容,并插在第n行后 

escape 回到命令模式 

^v char 插入时忽略char的指定意义,这是为了插入特殊字符 


在vi中删除文本 
命令 删除操作 x 删除光标处的字符,可以在x前加上需要删除的字符数目 nx 从当前光标处往后删除n个字符 X 删除光标前的字符,可以在X前加上需要删除的字符数目 nX 从当前光标处往前删除n个字符 dw 删至下一个字的开头 ndw 从当前光标处往后删除n个字 dG 删除行,直到文件结束 dd 删除整行 ndd 从当前行开始往后删除 db 删除光标前面的字 ndb 从当前行开始往前删除n字 :n,md 从第m行开始往前删除n行 d或d$ 从光标处删除到行尾 dcursor_command 删除至光标命令处,如dG将从当产胆行删除至文件的末尾 ^h或backspace 插入时,删除前面的字符 ^w 插入时,删除前面的字 修改vi文本 每个命令前面的数字表示该命令重复的次数 命令 替换操作 rchar 用char替换当前字符 R text escape 用text替换当前字符直到换下Esc键 stext escape 用text代替当前字符 S或cctext escape 用text代替整行 cwtext escape 将当前字改为text Ctext escape 将当前行余下的改为text cG escape 修改至文件的末尾 ccursor_cmd text escape 从当前位置处到光标命令位置处都改为text 在vi中查找与替换 命令 查找与替换操作 /text 在文件中向前查找text ?text 在文件中向后查找text n 在同一方向重复查找 N 在相反方向重复查找 ftext 在当前行向前查找text Ftext 在当前行向后查找text ttext 在当前行向前查找text,并将光标定位在text的第一个字符 Ttext 在当前行向后查找text,并将光标定位在text的第一个字符 :set ic 查找时忽略大小写 :set noic 查找时对大小写敏感 :s/oldtext/newtext 用newtext替换oldtext :m,ns/oldtext/newtext 在m行通过n,用newtext替换oldtext & 重复最后的:s命令 :g/text1/s/text2/text3 查找包含text1的行,用text3替换text2 :g/text/command 在所有包含text的行运行command所表示的命令 :v/text/command 在所有不包含text的行运行command所表示的命令 在vi中复制文本 命令 复制操作 yy 将当前行的内容放入临时缓冲区 nyy 将n行的内容放入临时缓冲区 p 将临时缓冲区中的文本放入光标后 P 将临时缓冲区中的文本放入光标前 "(a-z)nyy 复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行 "(a-z)ndd 删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行 "(a-z)p 将名字为圆括号的可命名缓冲区的内容放入当前行后 "(a-z)P 将名字为圆括号的可命名缓冲区的内容放入当前行前 在vi中撤消与重复 命令 撤消操作 u 撤消最后一次修改 U 撤消当前行的所有修改 . 重复最后一次修改 , 以相反的方向重复前面的f、F、t或T查找命令 ; 重复前面的f、F、t或T查找命令 "np 取回最后第n次的删除(缓冲区中存有一定次数的删除内容,一般为9) n 重复前面的/或?查找命令 N 以相反方向重复前面的/或?命令 保存文本和退出vi 命令 保存和/或退出操作 :w 保存文件但不退出vi :w file 将修改保存在file中但不退出vi :wq或ZZ或:x 保存文件并退出vi :q! 不保存文件,退出vi :e! 放弃所有修改,从上次保存文件开始再编辑 vi中的选项 选项 作用 :set all 打印所有选项 :set nooption 关闭option选项 :set nu 每行前打印行号 :set showmode 显示是输入模式还是替换模式 :set noic 查找时忽略大小写 :set list 显示制表符(^I)和行尾符号 :set ts=8 为文本输入设置tab stops :set window=n 设置文本窗口显示n行 vi的状态 选项 作用 :.= 打印当前行的行号 := 打印文件中的行数 ^g 显示文件名、当前的行号、文件的总行数和文件位置的百分比 :l 使用字母"l"来显示许多的特殊字符,如制表符和换行符 在文本中定位段落和放置标记 选项 作用 { 在第一列插入{来定义一个段落 [[ 回到段落的开头处 ]] 向前移到下一个段落的开头处 m(a-z) 用一个字母来标记当前位置,如用mz表示标记z '(a-z) 将光标移动到指定的标记,如用'z表示移动到z 在vi中连接行 选项 作用 J 将下一行连接到当前行的末尾 nJ 连接后面n行 光标放置与屏幕调整 选项 作用 H 将光标移动到屏幕的顶行 nH 将光标移动到屏幕顶行下的第n行 M 将光标移动到屏幕的中间 L 将光标移动到屏幕的底行 nL 将光标移动到屏幕底行上的第n行 ^e(ctrl+e) 将屏幕上滚一行 ^y 将屏幕下滚一行 ^u 将屏幕上滚半页 ^d 将屏幕下滚半页 ^b 将屏幕上滚一页 ^f 将屏幕下滚一页 ^l 重绘屏幕 z-return 将当前行置为屏幕的顶行 nz-return 将当前行下的第n行置为屏幕的顶行 z. 将当前行置为屏幕的中央 nz. 将当前行上的第n行置为屏幕的中央 z- 将当前行置为屏幕的底行 nz- 将当前行上的第n行置为屏幕的底行 vi中的shell转义命令 选项 作用 :!command 执行shell的command命令,如:!ls :!! 执行前一个shell命令 :r!command 读取command命令的输入并插入,如:r!ls会先执行ls,然后读入内容 :w!command 将当前已编辑文件作为command命令的标准输入并执行command命令,如:w!grep all :cd directory 将当前工作目录更改为directory所表示的目录 :sh 将启动一个子shell,使用^d(ctrl+d)返回vi :so file 在shell程序file中读入和执行命令 vi中的宏与缩写 (避免使用控制键和符号,不要使用字符K、V、g、q、v、*、=和功能键) 选项 作用 :map key command_seq 定义一个键来运行command_seq,如:map e ea,无论什么时候都可以e移到一个字的末尾来追加文本 :map 在状态行显示所有已定义的宏 :umap key 删除该键的宏 :ab string1 string2 定义一个缩写,使得当插入string1时,用string2替换string1。当要插入文本时,键入string1然后按Esc键,系统就插入了string2 :ab 显示所有缩写 :una string 取消string的缩写 在vi中缩进文本 选项 作用 ^i(ctrl+i)或tab 插入文本时,插入移动的宽度,移动宽度是事先定义好的 :set ai 打开自动缩进 :set sw=n 将移动宽度设置为n个字符 n<< 使n行都向左移动一个宽度 n>> 使n行都向右移动一个宽度,例如3>>就将接下来的三行每行都向右移动一个移动宽度 1.编辑模式: 插入/替换 (按INSERT键切换) 2.[ESC] 指令模式 3.输入模式 将在指令模式下输入 a 新增(a,A) a:从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动。 A:从光标所在列最后面的地方开始新增资料。 插入(i,I) i:从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。 I:从光标所在列的第一个非空白字元前面开始插入资料。 开始(o,O) o:在光标所在列下新增一列并进入输入模式。 O:在光标所在列上方新增一列并进入输入模式。 4.存盘/退出 [ESC] :wq //存盘退出 :w! //存盘继续 :q //退出 (源文件未被编辑过可用) :q! //强制退出 5.删除与改修 [ESC] x //删除光标所在字符 dd //删除光标所在列。 r //修改光标所在字元,r后接着要修正的字符。 R //进入取替换状态。 s //删除光标所在字元,并进入输入模式。 S //删除光标所在的列,并进入输入模式。 6.恢复 [ESC] u //可以恢复被删除的文字。 U //可以恢复光标所在列的所有改变。

  

vi的复制、粘贴、查找、删除等常用命令


vi编辑器有3种模式:命令模式、输入模式、末行模式。掌握这三种模式十分重要。
•命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外两种模式,同时无论在任何模式下只要按一下[Esc]键都可以返回命令模式。在命令模式中输入字幕“i”就可以进入vi的输入模式编辑文件。 •输入模式:在这个模式中我们可以编辑、修改、输入等编辑工作,在编辑器最后一行显示一个“--INSERT--”标志着vi进入了输入模式。当我们完成修改输入等操作的时候我们需要保存文件,这时我们需要先返回命令模式,在进入末行模式保存。 •末行模式:在命令模式输入“:”即可进入该模式,在末行模式中有好多好用的命令。 命令模式下的操作 1. 复制 yy命令复制当前整行的内容到vi缓冲区; yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词; y$复制光标所在位置到行尾内容到缓存区; y^复制光标所在位置到行首内容到缓存区; #yy例如:5yy就是复制5行; #yw例如:2yw就是复制两个单词; 如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区; 2. 粘贴 粘贴缓冲区中的内容,用p; 3. 删除 x删除光标处的单个字符; dd删除光标所在行; dw删除当前字符到单词尾包括空格的所有字符; #x例如3x删除光标处向右的三个字符; #dd例如3dd从当前行开始向下删除三行文本; 4. 撤销 u命令取消最近一次的操作,可以使用多次来恢复原有的操作; U取消所有操作; Ctrl+R可以恢复对使用u命令的操作; 5.切换到输入模式的命令 ◦ 新增 (append) a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。 A: 从光标所在列最後面的地方开始新增资料。 ◦ 插入 (insert) i: 从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。 I :从光标所在列的第一个非空白字元前面开始插入资料。 ◦ 开始 (open) o :在光标所在列下新增一列并进入输入模式。 O: 在光标所在列上方新增一列并进入输入模式。 ◦Esc退出命令; 末行模式下的操作 1. 至上而下的查找 / 要查找的字符窜,其中/代表从光标所在位置起开始查找,例如:/ work; 2. 至下而上的查找 ?要查找的字符窜 例如:/ work; 3. 替换 :s/old/new用new替换行中首次出现的old; : s/old/new/g 用new替换行中所有出现的old; :#,# s/old/new/g用new替换从第#行到第#行中出现的old; :% s/old/new/g用new替换整篇中出现的old; 4. 如果替换的范围较大时,在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,例如:s/old/new/c 或s/old/new/gc;

  

linux vi命令详解及使用技巧集锦
 
2009-11-3     作者:        编辑:闫蕊   点击进入论坛
 
关键词:linux vi
 

  进入vi的命令
 
  vi filename :打开或新建文档,并将光标置于第一行首
 
  vi +n filename :打开文档,并将光标置于第n行首
 
  vi + filename :打开文档,并将光标置于最后一行首
 
  vi +/pattern filename:打开文档,并将光标置于第一个和pattern匹配的串处
 
  vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
 
  vi filename....filename :打开多个文档,依次编辑
 
  移动光标类命令
 
  h :光标左移一个字符
 
  l :光标右移一个字符
 
  space:光标右移一个字符
 
  Backspace:光标左移一个字符
 
  k或Ctrl+p:光标上移一行
 
  j或Ctrl+n :光标下移一行
 
  Enter :光标下移一行
 
  w或W :光标右移一个字至字首
 
  b或B :光标左移一个字至字首
 
  e或E :光标右移一个字j至字尾
 
  ) :光标移至句尾
 
  ( :光标移至句首
 
  }:光标移至段落开头
 
  {:光标移至段落结尾
 
  nG:光标移至第n行首
 
  n+:光标下移n行
 
  n-:光标上移n行
 
  n$:光标移至第n行尾
 
  H :光标移至屏幕顶行
 
  M :光标移至屏幕中间行
 
  L :光标移至屏幕最后行
 
  0:(注意是数字零)光标移至当前行首
 
  $:光标移至当前行尾
 
  屏幕翻滚类命令
 
  Ctrl+u:向文档首翻半屏
 
  Ctrl+d:向文档尾翻半屏
 
  Ctrl+f:向文档尾翻一屏
 
  Ctrl+b;向文档首翻一屏
 
  nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
 
  插入文本类命令
 
  i :在光标前
 
  I :在当前行首
 
  a:光标后
 
  A:在当前行尾
 
  o:在当前行之下新开一行
 
  O:在当前行之上新开一行
 
  r:替换当前字符
 
  R:替换当前字符及其后的字符,直至按ESC键
 
  s:从当前光标位置处开始,以输入的文本替代指定数目的字符
 
  S:删除指定数目的行,并以所输入文本代替之
 
  ncw或nCW:修改指定数目的字
 
  nCC:修改指定数目的行
 
  删除命令
 
  ndw或ndW:删除光标处开始及其后的n-1个字
 
  do:删至行首
 
  d$:删至行尾
 
  ndd:删除当前行及其后n-1行
 
  x或X:删除一个字符,x删除光标后的,而X删除光标前的
 
  Ctrl+u:删除输入方式下所输入的文本
 
  搜索及替换命令 :
 
  /pattern:从光标开始处向文档尾搜索pattern
 
  ?pattern:从光标开始处向文档首搜索pattern
 
  n:在同一方向重复上一次搜索命令
 
  N:在反方向上重复上一次搜索命令
 
  :s/p1/p2/g:将当前行中任何p1均用p2替代
 
  :n1,n2s/p1/p2/g:将第n1至n2行中任何p1均用p2替代
 
  :g/p1/s//p2/g:将文档中任何p1均用p2替换
 
  选项配置
 
  all:列出任何选项配置情况
 
  term:配置终端类型
 
  ignorance:在搜索中忽略大小写
 
  list:显示制表位(Ctrl+I)和行尾标志($)
 
  number:显示行号
 
  report:显示由面向行的命令修改过的数目
 
  terse:显示简短的警告信息
 
  warn:在转到别的文档时若没保存当前文档则显示NO write信息
 
  nomagic:允许在搜索模式中,使用前面不带“”的特别字符
 
  nowrapscan:禁止vi在搜索到达文档两端时,又从另一端开始
 
  mesg:允许vi显示其他用户用write写到自己终端上的信息
 
  最后行方式命令
 
  :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
 
  :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
 
  :n1,n2 d :将n1行到n2行之间的内容删除
 
  :w :保存当前文档
 
  :e filename:打开文档filename进行编辑
 
  :x:保存当前文档并退出
 
  :q:退出vi
 
  :q!:不保存文档并退出vi
 
  :!command:执行shell命令command
 
  :n1,n2 w!command:将文档中n1行至n2行的内容作为command的输入并执行之,若不指
 
  定n1,n2,则表示将整个文档内容作为command的输入
 
  :r!command:将命令command的输出结果放到当前行 。

  

linux > 正文
 

vim 命令
 
Nov132011
 

作者:逝去日子   发布:2011-11-13 19:38   分类:linux   阅读:90 views   暂无评论   





Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。我把我收集来的一些命令分享下。
 

1.
 vim
 #在命令行中输入vim,进入vim编辑器
 2.
 i
 #按一下i键,下端显示 –INSERT–
 #插入命令,在vim中可能任意字符都有作用
 3.
 Esc
 #退出i(插入)命令进行其它命令使用
 4.
 :r filename
 #读入一个文件内容,并写入到当前编辑器中
 5.
 :w newfilename
 #将该编辑器中的内容写入到一个新文件中
 6.
 :w
 #在编辑的过程中保存文件,相当于word中的ctrl+s
 7.
 :! command
 暂时离开 vi 到指令列模式下执行 command 的显示结果!例如
 :!ls
 #在编辑过程中执行shell命令ls
 8.
 :sh
 #进入shell命令行,执行完命令后ctrl+d退出重新进入vim编辑继续编辑
 在shell命令下,执行ctral+l完成清屏
 9.
 :wq
 #保存文件并退出
 10.
 ZZ
 #保存文件并退出,同上一个命令,注意大写
 11.
 :q!
 #强制退出,不保存
 12.
 :set number或者:set nu
 #使编辑中的文件显示行号
 13.
 :set nonumber或者:set nonu
 #与上一条命令相反,不显示行号
 14.
 :help i
 #查看插入命令帮助
 15.
 u
 #撤消上一步操作
 16.
 /Fedora
 #查找Fedora字符
 17.
 :s /Fedora/Redhat
 #将Fedora字符替换为Redhat(只替换在光标所在的行)
 18.
 dw
 #删除单词
 dd
 #删除行
 19.
 o
 #打开空白一行
 20.
 vim + filename
 #进行文件最后一行进行编辑
 21.
 vim +n filename
 #进入文件第n行进行编辑
 22.
 :1,.s/redhat/fedora
 #.号表示当前行,即光标所在行
 #将第1行到当前行(.)第一次出现的redhat字符代替为fedora
 23.
 :1,.s/redhat/fedora/g
 #将第1行到当前行(.)所有出现的redhat字符代替为fedora,g
 全局标志
 24.
 :1,$s/redhat/fedora/g
 #$表示最后一行
 #将第1行到最后一行所有出现的redhat字符代替为fedora
 25.
 :%s/redhat/fedora/g
 #同上一个命令
 26.
 :%s//fedora/g
 #将第1行到最后一行所有出现的redhat字代替为fedora
 #字,而不是字符
 27.
 :f
 #显示文件内容,状态等等
 #同ctrl+g命令
 28.
 :e!
 #当前文件,返回到上次保存
 :e file
 #切换编辑文件
 29.
 :n
 #当编辑时有多个文件(比如vim file1 file2)时切换到下一个文件,与:e file
 结合使用
 
VIM命令大全
 光标控制命令
 命令 光标移动
 h 向左移一个字符
 j 向下移一行
 k 向上移一行
 l 向右移一个字符
 G 移到文件的最后一行
 w 移到下一个字的开头
 W 移到下一个字的开头,忽略标点符号
 b 移到前一个字的开头
 B 移到前一个字的开头,忽略标点符号
 L 移到屏幕的最后一行
 M 移到屏幕的中间一行
 H 移到屏幕的第一行
 e 移到下一个字的结尾
 E 移到下一个字的结尾,忽略标点符号
 ( 移到句子的开头
 ) 移到句子的结尾
 { 移到段落的开头
 } 移到下一个段落的开头
 0(数字), | 移到当前行的第一列
 ^ 移到当前行的第一个非空字符
 $ 移到当前行的最后一个字符
 +, Enter 移到下一行的第一个字符
 - 移到前一行的第一个非空字符
 在 vi 中添加文本
 命令 插入动作
 a 在光标后插入文本
 A 在当前行插入文本
 i 在光标前插入文本
 I 在当前行前插入文本
 o 在当前行的下边插入新行
 O 在当前行的上边插入新行
 s 删除光标所在处字符,并进入插入模式
 S 删除光标所在的行,并进入插入模式
 :r file 读入文件 file 内容,并插在当前行后
 :nr file 读入文件 file 内容,并插在第 n 行后
 Esc 回到命令模式
 ^v char 插入时忽略 char 的指定意义,这是为了插入特殊字符
 在 vi 中删除文本
 命令 删除操作
 x 删除光标处的字符
 dw 删至下一个字的开头
 dG 删除行,直到文件结束
 dd 删除整行
 db 删除光标前面的字
 :n,md 从第 m 行开始往前删除 n 行
 d, d$ 从光标处删除到行尾
 ^h, backspace 插入时,删除前面的字符
 ^w 插入时,删除前面的字
 修改 vi 文本
 每个命令前面的数字表示该命令重复的次数
 命令 替换操作
 rchar 用 char 替换当前字符
 R text escape 用 text 替换当前字符直到按下 Esc 键
 stext escape 用 text 代替当前字符
 S 或 cctext escape 用 text 代替整行
 cwtext escape 将当前字改为 text
 Ctext escape 将当前行余下的改为 text
 cG escape 修改至文件的末尾
 ccursor_cmd text escape 从当前位置处到光标命令位置处都改为 text
 在 vi 中查找与替换
 命令 查找与替换操作
 /text 在文件中向前查找 text
 ?text 在文件中向后查找 text
 n 在同一方向重复查找
 N 在相反方向重复查找
 ftext 在当前行向前查找 text
 Ftext 在当前行向后查找 text
 ttext 在当前行向前查找 text,并将光标定位在 text 的第一个字符
 Ttext 在当前行向后查找 text,并将光标定位在 text 的第一个字符
 :set ic 查找时忽略大小写
 :set noic 查找时对大小写敏感
 :ranges/pat1/pat2/g 用 newtext 替换 oldtext
 :m,ns/oldtext/newtext 在 m 行通过 n,用 newtext 替换 oldtext
 & 重复最后的 :s 命令
 :g/text1/s/text2/text3 查找包含 text1 的行,用 text3 替换 text2
 :g/text/command 在所有包含 text 的行运行 command 所表示的命令
 :v/text/command 在所有不包含 text 的行运行 command 所表示的命令
 在 vi 中复制文本
 命令 复制操作
 yy 将当前行的内容放入临时缓冲区
 nyy 将 n 行的内容放入临时缓冲区
 p 将临时缓冲区中的文本放入光标后
 P 将临时缓冲区中的文本放入光标前
 “(a-z)nyy 复制 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行
 “(a-z)ndd 删除 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行
 “(a-z)p 将名字为圆括号的可命名缓冲区的内容放入当前行后
 “(a-z)P 将名字为圆括号的可命名缓冲区的内容放入当前行前
 在 vi 中撤消与重复
 命令 撤消操作
 u 撤消最后一次修改
 U 撤消当前行的所有修改
 . 重复最后一次修改
 , 以相反的方向重复前面的 f、F、t 或 T 查找命令
 ; 重复前面的 f、F、t 或 T 查找命令
 “np 取回最后第 n 次的删除(缓冲区中存有一定次数的删除内容,一般为 9)
 n 重复前面的 / 或 ? 查找命令
 N 以相反方向重复前面的 / 或 ? 命令
 保存文本和退出 vi
 命令 保存和/或退出操作
 :w 保存文件但不退出 vi
 :w file 将修改保存在 file 中但不退出 vi
 :wq 或 ZZ 或 保存文件并退出 vi
 :q! 不保存文件,退出 vi
 :e! 放弃所有修改,从上次保存文件开始再编辑
 vi 中的选项
 选项 作用
 :set all 打印所有选项
 :set nooption 关闭 option 选项
 :set nu 每行前打印行号
 :set showmode 显示是输入模式还是替换模式
 :set autoindent 继承前一行的缩进方式,特别适用于多行注释
 :set smartindent 为C程序提供自动缩进
 :set list 显示制表符(^I)和行尾符号
 :set ts=8 为文本输入设置 tab stops
 :set window=n 设置文本窗口显示 n 行
 :set number 显示行数
 :set nonumber 取消显示行数
 vi 的状态
 选项 作用
 :.= 打印当前行的行号
 := 打印文件中的行数
 ctrl+g 显示文件名、当前的行号、文件的总行数和文件位置的百分比
 :l 使用字母 “l” 来显示许多的特殊字符,如制表符和换行符
 在文本中定位段落和放置标记
 选项 作用
 { 在第一列插入 { 来定义一个段落
 [[ 回到段落的开头处
 ]] 向前移到下一个段落的开头处
 m(a-z) 用一个字母来标记当前位置,如用 mz 表示标记 z
 ‘(a-z) 将光标移动到指定的标记,如用 ‘z 表示移动到 z
 在 vi 中连接行
 选项 作用
 J 将下一行连接到当前行的末尾
 nJ 连接后面 n 行
 光标放置与屏幕调整
 选项 作用
 H 将光标移动到屏幕的顶行
 nH 将光标移动到屏幕顶行下的第 n 行
 M 将光标移动到屏幕的中间
 L 将光标移动到屏幕的底行
 nL 将光标移动到屏幕底行上的第 n 行
 ^e(ctrl+e) 将屏幕上滚一行
 ctrl+y 将屏幕下滚一行
 ctrl+u 将屏幕上滚半页
 ctrl+d 将屏幕下滚半页
 ctrl+b 将屏幕上滚一页
 ctrl+f 将屏幕下滚一页
 ctrl+l 重绘屏幕
 z-return 将当前行置为屏幕的顶行
 nz-return 将当前行下的第 n 行置为屏幕的顶行
 z. 将当前行置为屏幕的中央
 nz. 将当前行上的第 n 行置为屏幕的中央
 z- 将当前行置为屏幕的底行
 nz- 将当前行上的第 n 行置为屏幕的底行
 vi 中的 shell 转义命令
 选项 作用
 :!command 执行 shell 的 command 命令,如 :!ls
 :!! 执行前一个 shell 命令
 :r!command 读取 command 命令的输入并插入,如 :r!ls 会先执行 ls,然后读入内容
 :w!command 将当前已编辑文件作为 command 命令的标准输入并执行 command 命令,如 :w!grep all
 :cd directory 将当前工作目录更改为 directory 所表示的目录
 :sh 将启动一个子 shell,使用 ^d(ctrl+d) 返回 vi
 :so file 在 shell 程序 file 中读入和执行命令
 vi 中的宏与缩写
 (避免使用控制键和符号,不要使用字符 K、V、g、q、v、*、= 和功能键)
 选项 作用
 :map key command_seq 定义一个键来运行 command_seq,如 :map e ea,无论什么时候都可以 e 移到一个字的末尾来追加文本
 :map 在状态行显示所有已定义的宏
 :umap key 删除该键的宏
 :ab string1 string2 定义一个缩写,使得当插入 string1 时,用 string2 替换 string1。当要插入文本时,键入 string1 然后按 Esc 键,系统就插入了 string2
 :ab 显示所有缩写
 :una string 取消 string 的缩写
 在 vi 中缩进文本
 选项 作用
 ctrl+i或 tab 插入文本时,插入移动的宽度,移动宽度是事先定义好的
 :set ai 打开自动缩进
 :set sw=n 将移动宽度设置为 n 个字符
 n> 使 n 行都向右移动一个宽度,例如 3>> 就将接下来的三行每行都向右移动一个移动宽度

  

于电脑的技术与艺术 









































vi 常用命令行


暂时不完善,不断更新和整理中....

1.vi 模式
a) 一般模式:vi处理文件时,一进入该文件,就是一般模式了.
b) 编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作。等按下‘i,I,o,O,a,A,r,R’等 
字母之后才能进入编辑模式.通常在linux中,按下上述字母时,左下方会出现'INSERT'或者‘REPLACE’字样,才可以
输入任何文字到文件中.要回到一般模式,按下[ESC]键即可.
c) 命令行模式:在一般模式中,输入“: 或者/或者?”,即可将光标移动到最下面一行,在该模式下,您可以搜索数据,而且读取,
存盘,大量删除字符,离开vi,显示行号等操作.


2.vi 常用命令汇总:
2.1 一般模式
a) 移动光标: 
上下左右方向键 ↑(k)↓(j)←(h) →(l)
翻页 pagedown / pageup 按键 
数字 0 : 将光标移动到当前行首 
$ : 将光标移动到当前行尾
G : 移动到这个文件的最后一行

nG : n为数字,移动到这个文件的第n行. 
gg : 移动到这个文件的第一行相当于1G 
    
b)  搜索与替换 
/word :  从光标开始,向下查询一个名为word的字符串。 
:n1、n2s/word1/word2/g : n1 与n2 为数字.在第n1与n2行之间寻找word1这个字符串, 并将该字符串替换为word2。
:1、$s/word1/word2/g : 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2 
:1、$s/word1/word2/gc: 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2。 并且在替换之前显示提示符给用户确认(conform)是否需要替换。


c) 删除,复制,粘贴 
x,X  : 在一行中,x为向后删除一个字符(相当于del键),X为向前删除一个字符(相当于backspace键)。 
dd   : 删除光标所在的那一整行。 
ndd  : n 为数字。从光标开始,删除向下n列。 
yy   : 复制光标所在的那一行。   
nyy  : n为数字。复制光标所在的向下n行。 
p,P  : p 为将已复制的数据粘贴到光标的下一行,P则为贴在光标的上一行。 
u    : 复原前一个操作 
CTRL + r : 重做上一个操作。
小数点'.': 重复前一个动作。


2.2  编辑模式:
i, I : 在光标所在处插入输入文字,已存在的文字向后退。i 为‘从当前光标所在处插入’,I 为‘在当前所在行的一个非空格符处开始插入’。 
a, A : a 为‘从当前光标所在处的下一个字符开始插入’。A 为‘从光标所在行的最后一个字符处开始插入’。 
o,O  : 这是英文o的大小写。o为‘在当前光标所在行的下一行处插入新的一行’。O表示‘在当前光标所在行的上一行插入新的一行’。 
r,R  : 替换:r 会替换光标所在的那一个字符。 R : 会一直替换光标所在的字符,直到按下esc 键为止。 
ESC  : 进入一般模式。


2.3 命令模式:
a) :w   : 将编辑的数据写入硬盘
b) :q   : 离开vi
c) :q!  : 强制离开,不存储
d) :wq  : 存储后离开
e) :wq! : 强制存储后离开

3. vim 附加命令行
3.1 块选择(visual block)
v  字符选择,将光标经过的地方反白显示
V  行选择,会将光标经过的行反白选择
ctrl + v 块选择,可以用长方形的方式选择数据
y  复制反白的地方 
d  将反白的地方删除掉
3.2 多文件编辑
:n  编辑下一个文件
:N  编辑上一个文件
:files  列出当前vim 打开的所有文件
3.3 多窗口功能
:sp 【filename】打开一个新窗口,如果加filename,表示在新窗口打开一个新文件否则表示两个窗口为同一个文件内容
ctrl+wj  先按下ctrl ,再按下w后,放开所有按键,然后按下j,则光标可移动到下方的窗口
ctrl+wk  同上,不过光标移动到上面的窗口
ctrl+wq  其实就是:q结束离开。

  

原文地址:https://www.cnblogs.com/qmfsun/p/3139150.html