vi启动选项

vi -R以只读方式打开文件

  • :wq!强制写

view只读打开文件

多文件编辑

vim内部每个buffer打开一个文件,多个buffer可以打开同一个文件

可以只有一个窗口,也可以有多个tab标签

每个tab对应一个buffer,一个buffer可以对应多个tab

单个窗口

多个tab

这里描述的vim使用方式,是希望能在vim中完成大多数工作,而不是频繁的退出vim

  • 首先:tabnew创建一个标签
  • 然后:e打开一个文件
  • :tabnext在窗口上打开下一个tab
  • :tabprevious在窗口上打开前一个tab
  • :q或者:tabclose关闭tab

寄存器

vim中设计了特别的暂存机制——寄存器,用于保存拷贝和删除的文本

在命令模式下以”双引号开头引用这些寄存器

命令行模式:registers显示寄存器

有名寄存器

a-z,一共26个,供用户使用

编号寄存器

0-9,10个,vim自己使用,存放删除和拷贝的文本

  • “0号寄存器是visual模式下拷贝的问题
  • “1-”9号寄存器是dd删除、yy拷贝的行文本
缺省寄存器
  • % 当前窗口对应的文件名
  • # 当前窗口的其它文件名
  • : 命令行模式最近输入的命令
  • . 最近插入的文本
  • “ 最近删除或拷贝的文本

剪切与粘贴

以寄存器作为剪贴板,vim的剪切与粘贴非常灵活

命令模式
  • dd命令将删除行拷贝到””和”1寄存器,并且下压2-9号寄存器
  • yy命令将拷贝行复制到””和”0寄存器
  • p命令将缺省寄存器””内容拷贝到光标位置之后
  • P命令将缺省寄存器””内容拷贝到光标位置之前
Visual模式
  • 命令模式下v进入visual模式
  • khjl或方向键移动光标
  • y命令将选择内容拷贝到””和”0寄存器,y表示yank

Motion与range

motion是指移动光标的命令

拷贝与删除命令可与motion组合

  • 命令=操作符+motion
  • y$,d0
motion 功能
$ 从光标到行尾
0 从光标到行首
e或w 从光标到字尾
b 从光标到字首

range是指行数

寄存器+[range]+d/y+[motion]组合,完成拷贝删除动作→寄存器

  • “wdd 删除当前行到”w寄存器
  • “z7yy 拷贝从当前光标开始算,一共7行,到”z寄存器

寄存器+p,将寄存器内容拷贝到光标后的位置上,完成寄存器→缓冲动作

光标快速定位

:n定位到第n行

:0或:1定位到第1行的行首

:$定位到最后一行的行尾

1G定位到第1行的行首

G或0G定位到最后一行的行首

nG定位到第n行的行首

Ctrl-g在命令行区域输出当前行号

Ctrl-End跳到最后一个字符或者G$

vim定制

让vim更舒服一些,修改.exrc或者.vimrc

:set命令

  • :set all 显示所有选项
  • :set 显示被修改的选项
  • :set X? 显示选项X的值

执行shell命令

:shell命令切换到shell,exit回到vim

:!命令,执行shell命令

:r!命令,将shell命令输出粘贴到当前位置

tips

折叠

set foldenable
set foldmethod=indent

  • zc 关闭折叠
  • zo 打开折叠
设置交换文件目录

set directory^=$HOME/.vim/swap//