admin 管理员组

文章数量: 887021

VIM已经用了很长一段时间了,作为一个强大的编辑器,学会容易精通难,最近抽空拜读了一下《学习VI和VIM编辑器(第7版)》第一部分和第二部分,随手做了点笔记写在下面备查。

vi和vim总结(《学习VI和VIM编辑器第7版中文》第一部分、第二部分)
(command)(number)(text object)
(number)(text object)(command)
i\c\d\y是常用Command number是可选
1.进入输入状态
  当前位置插入 i
  后面位置插入 a
  本行开始插入 I
  本行末插入 A
  上一行插入 O
  下一行插入 o
  插入#个重复字符X #(i/a/o/I/A/O)X-ESC
  替换#个重复字符X #rX-ESC
  进入覆盖模式 R
  覆盖输入指定范围  c (cw c#w c0 c$ cb c#b cc=S)
  覆盖输入几个字符 s
  覆盖当前字符 r
  替换当前单词    cw
  替换当前#个单词 c#w
  删除当前字符 x
  删除#字符 #x
  删除当前单词或其局部 dw de dE db
  删除当前行或其局部 dd d0 d$=D
  删除#行 d#d #dd
  大小写更换当前字符 ~
  将下一行与当前行合并 J
  将下(#-1)行与当前行合并 #J
 
2.移动光标
  左右上下一个字符 h l k j
  左右上下#个字符 #h #l #k #j
  当前行开始字符 ^
  跳转到行首 0
  当前行行尾 $
  下一个词 w W(不算标点符号)
  下#个词 #w #W
  上一个词 b B(不算标点符号)
  上#个词 #b #B(不算标点符号)
  显示文件行数等信息 Ctrl-G
  跳转到#行 #G
  跳转到文件开头 1G gg
  跳转到文件结尾 G
  上一行第一个字符 - (忽略空格、TAB)
  下一行第一个字符 +, Enter (忽略空格、TAB)
  跳转到屏幕的第一行 H
  调转到屏幕的第#行 #H
  跳转到屏幕的中间 M
  跳转到屏幕的最后一行 L
  跳转到屏幕的倒数第#行 #L
  跳转到本行第一个非空字符 ^
  跳转到本行第#列 #|
  跳转到#%行 #%
  单词结尾 e E(忽略标点符号)
  重画屏幕 Ctrl-L
  滚动到上一页 Ctrl+b
  滚动到下一页 Ctrl+f
  滚动到上半页 Ctrl+u
  滚动到下半页 Ctrl+d
  滚动下一行 Ctrl+e
  滚动上一行 Ctrl+y
  使当前行滚动为第一行 z-Enter
  使当前行滚动为中间 z.
  使第#行滚动为中间 #z.
  使当前行滚动为最后一行 z-
  返回上一个位置 ``
  返回上一个位置的开头处 ''
  跳到第一行第一个字符(并不总有效) Ctrl-Home
  调到最后一行最后一个字符(并不总有效) Ctrl-End
  找到对应的括号 %
  寻找C语言函数的定义 :tag [function name]
(用shell的ctags命令可以建立tags文件包括所有函数的定义)

3.查找和替换
  查找某个字符串 /patter(空格区分单词)-Enter 缺省是区分大小写
  不区分大小写查找 :set ic(ignorecase :set noic相反,是不区分大小写)
/\cWord(/CWord区分大小写)
  继续查找 n N(反方向) /-Enter ?-Enter
  逆向查找 ?
  使用正则表达式进行查找 \<表明开始 \>表明结束 正则表达式的字符都用\来标明转义
  行内搜索字符x fx Fx tx Tx ; ,
  删除查找的字符串 d/pattern d?pattern
  替换       :[范围]s/source/replce/gc
  替换字符串 :%s/source/replace/c(确认每次替换)  
  全部替换 :%s/source/replace/g
  替换行内第一个满足的字符串 :s/source/replace/
  对满足某个模式的行中进行替换 :g/pattern/s/source(如果与pattern相同则可以省略)/replace/g
  模式 :/pattern/
  不区分大小写替换 :set ic(set noic是区分大小写)
  用正则表达式替换特别 &(反应匹配的内容) \L \l \U \u \e \E (大小写) \<
\>(单词开头或结尾)
\(\)(可定义9个模式的缓存,可以保存在更换前和更换后用相同的字符串)
~(上一次匹配的正则表达式)
正则表达式中可以用;或:等代替/,特别是在处理含路径的文件时特别有用
  全局上一次的匹配 :%&g
  用新模式来代替就模式来完成替换 :%~g

4.使用剪贴板(删除的内容也会被放入剪贴板)
  复制当前行 yy=Y
  复制当前行到a缓冲区 "ayy
  扩展当前行到a缓冲区 "Ayy
  剪切当前行 dd
  复制当前单词 yw
  剪切当前单词 dw
  复制当前n个单词 y#w
  剪切当前的n个单词 d#w
  复制到本行行首 y0
  剪切到本行行首 d0    
  复制到本行行尾 y$
  剪切到本行行尾 d$
  拷贝或剪切反向选取n个单词: y/d#B
  拷贝或剪切到指定行: y或d加#G
  拷贝或剪切指定字符: y或d加#l
  拷贝或剪切到屏幕第一行/中间/最后一行 y或d加H/M/L
  粘贴#号缓冲区 "#p "#P
  粘贴a缓冲区 "ap "aP (a~z 26个命名缓冲区)
  粘贴 p P (注意删除的内容都会放入剪贴板)

5.Undo和Redo
  Undo u U(一行内的撤销操作)
  Redo Ctrl-R
  重复命令 .

6.操作多个文件
  打开多个窗口 -o -O(后者是垂直打开) 添加数字则打开指定数目的窗口
  在新窗口中打开新文件 split vsplit
  窗口中切换 ^W
  交换轮转窗口 ^Wr ^WR ^Wx ^WX n^Wx n^WX ^WH ^WJ ^Wk ^WL ^Wt ^Wb ^Wp
  文件满屏 ^WT
  列出所有缓冲区(打开的文件) :unhide
  退出全部的文件 :qa
  编辑二进制文件 -b :set binary (防止出现不必要的文末换行符)
  同一个文件在两个窗口打开 (v)split 不带文件名参数
  设置窗口大小 选项winheight winwidth
  窗口参数 laststatus=1/2
  分割当前窗口为两个窗口 split vsplit(垂直分割) new(打开空白文件) vnew sview [filename]
sfind topleft
有文件参数则在新窗口打开该指定文件 :[n] split [++opt] [+cmd] [file]
  窗口命令 ^W开始 例如^Ws分割当前窗口 ^Wv垂直分割当前窗口
  扩大或缩小 :resize +/-n
  命令 ls files buffer help bNext sbNext
  分页 :tabnew :tabclose :tabonly
  关闭窗口 close quit only close

7.环境互动
  打开一个新文件 :e [filename]
  部分文件内容保存到新文件中 :[范围]w [new file name] :w %.new
  部分文件内容保存到另一个文件的末尾 :[范围]w >> [file name]
  执行一个命令 ![命令名]
  强制保存 w!
  另存 w [new file name]
  保存并退出 ZZ
  退出并不保存 q!
  保存并退出 wq
  强制保存并退出 wq!
  只有需要保存时才保存然后退出 x
  放弃所有修改重新打开文件 e!
  新建一个Shell sh 用Ctrl-D或exit返回
  挂起当前vi Ctrl-D fg返回
  只读方式打开的参数 -R 或用shell命令view
  恢复文件的参数 -r
  执行Shell命令 :![Shell命令]
  将Shell命令结果插入文件  :r ![Shell命令]
  将文件内容做参数 :[范围]![Shell命令]
  用当前这一行作为参数 :!![Shell命令]

8.vim设置
  设置参数 :set option
  取消参数 :set nooption
  看参数 :set all :set option?
  读入制定配置文件或脚本文件 :so [文件名]
  缺省配置文件 .vimrc .exrc
  常见参数 wrapmargin ic wrapscan autoindent number
autowrite(从安全角度最好不要改这个参数缺省值)
  缩进     :set autoindent Ctrl-D(上一层的缩排) Ctrl-T(另一层的缩排)
  左右缩进 << >> (:set shiftwidth=8)
  tab设置  :set tabstop=8
  显示行号 :set nu
  不显示行号 set nonu
  定义缩写 ab [缩写] [全文]
  取消缩写 unab [缩写]
  定义取消命令序列 map unmap (Ctrl-V用来引用vi定义的操作)
  将a缓冲区中的内容作为操作执行 @a
  将TAB和行尾特别显示出来 :set list (临时命令用l)
  设置是否与vi兼容 :set compatible
  配置文件 .vimrc .exrc
  配置文件的注释 "
  设置自动转行显示 set wrapmargin=#
  激活鼠标 set mouse=a

9.书签
  设置x书签 mx
  到x书签所在位置 `x
  到x书签做在行第一个字符 'x

10.ex命令
  :{目标}{命令}{位置}
  :g 可以在指定执行命令的范围时在全局进行执行
  显示某几行 :#,# #;#(后者可以以前一个为准进行+n等变化而不是以当前行号) . $ % - +
  显示行数行号 := .= nu
  基本命令 co/t m d s(替换)
  合并命令 |
  搜索 :g/pattern/ :g!/pattern/=v/pattern/
  打印/显示 p
  将其他文件插入到当前位置 :read [file name] :r [file name]
  将其他文件插入到指定位置 :[positin 0 /pattern/]read [file name] :[positin 0 /pattern/]r [file name]
  转到第一个文件 :rewind
  转到下一个文件 :n
  列出所有在编辑的文件 :args
  显示当前文件 e %
  显示备选文件 e #
  在文件中切换 Ctrl-^
  将文本复制到a缓冲区 :[范围]ya a
  把a缓冲区文本复制到当前位置 :pu a
  进入ex模式 Q

11.vim特别字符
  前文件名 %
  替换文件名 #
  前次插入的文本 .
  可以编辑目录,包括改名等
  获取帮助 :help

12.可视化操作
  进入可视模式 v
  可以用移动光标的命令来进行选择 见2
  其他选择的方式 countaw countaW countiw countiW

13.Vim脚本
  数学运算函数只能针对整数

14.gvim
  自定义菜单 :amenu
  配置文件 .vimrc .gvimrc

15.程序开发
  保留折叠 :mkview :loadview
  手动创建折叠 #zF #zfj
  打开折叠 zo
  关闭折叠 zc
  删除折叠 zE
  删除所有折叠 zD
  递增/递减foldlevel选项 zm/zr
  foldlevel选项设置为0 zM
  缩进折叠 :set foldmethod=indent :set shiftwidth=#
  设置显示的层数 :set foldlevel=#
  语法折叠 :set foldenable :set foldmethod=syntax
  diff模式折叠
  缩排模式 :set autoindent / smartindent / cindent / indentexpr
  paste选项会改变缩排自动功能,返回成自动缩排 :set nopaste
  自动补全^X开始 ^F ^N ^P ^L ^D
  映射键  map imap
  标签 标签栈 tags ^]
  高亮 :syntax enable :syntax on :set syntax=sh
  编译 :make

16.其他
  编辑二进制文件 -b :set binary
  输入特殊字符 ^K……
  自动保存设置 :set autowrite
  生成HTML格式表现文件 :runtime!syntax/2html.vim :#,#TOhtml
  比较两个文件 vim -d  vimdiff
  撤销功能设置 :set undolevel=# 1000
  撤销重做命令 :undo :redo u ^r
  保存当前会话 :mksession [filename]
  取得会话信息 :source [filename]
  设置内容行大小 :set wrap :set nowrap :set sidescroll=# :set sidescrolloff=#
:set listchars=……
  获取帮助 F1
  获得命令行历史 上下按钮 ^F


本文标签: vi vim