1.命令模式:当你在终端中输入“vim 文件名”就进入了命令模式,在命令模式下用户输入的
任何字符都被Vi当作命令加以解释执行
从命令模式转换到编辑模式的方法如下:
i,I:插入,在当前光标所在处前方插入(i) 在当前光标所在行首插入(I)
a,A:在当前光标所在处后方插入(a)在当前光标所在行尾追加(A)
o,O:在当前光标所在行下方打开一个新行(o)在当前光标所在行上方打开一个新行(O)
在一般模式下移动快捷方式:
h 左移动
j 下移动
k 上移动
l 右移动
w 跳到单词的词首
e 跳到单词的词尾(先跳到自己的词尾,再跳到后一个单词的词尾)
b 跳到前一个单词的词首(先跳到自己的词首,再跳到前一个词首)
^ 跳到本行的第一个非空白字符上
$ 跳到绝对行尾
G(跳到文件的最后一行),nG(跳到文件的第n行)
翻屏方法:
翻一个满屏:ctrl+f(后翻) ctrl+b(前翻)
翻半屏:ctrl+d(后翻) ctrl+u(前翻)
删除
x:删除光标所在处字符,跟数字组合
dd:dd删一行 n dd 删n行
修改:
c
复制和粘贴:
y 复制 yy复制一行 3 yy 复制三行
p 粘贴 在当前光标下行粘贴 (p) 在当前光标上行粘贴 (P)
u撤销上一次的修改
ctrl r 撤销撤销(把撤销操作撤销掉)
. 表示redo (把上个操作重复执行)

在vim中有一种可视模式,可以让你对一个文本块的整体进行命令操作。
例如你可以用高亮显示出一个文本块,然后用d命令删除这个文本块。这种
可视模式与其他的编辑相比的一个好处是你可以在改动以前看到你的操作
对于所编辑的文件产生的影响。
进入可视化模式:
V命令进入的行可视模式
v命令进入的字符可视模式
移动文本:
dd p (先删再粘)
2.编辑模式
在文本输入模式下,按Esc键,即回到命令模式
3.末行模式
在命令模式下,用户按“:”键即可进入末行模式下,多数文件管理命令都是在此模式下执行的
:10,100 d(删除10-100行)
:.,$-1 d(当前行到倒数第二行)

退出:
:q
:q!
:x,或:wq或ZZ (保存退出)
查找替换
/pattern 向后搜索字符串pattern
?pattern 向前搜索字符串pattern
n 下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个)
N 上一个匹配(同上)
:%s/old/new/g 搜索整个文件,将所有的old替换为new
:%s/old/new/gc 搜索整个文件,将所有的old替换为new,每次都要你确认是否替换

一次打开多个文件:
:next (打开下一个文件)
:prev (打开上一个文件)
:first (打开第一个文件)
:last (打开最后一个文件)
分隔窗口:
ctrl+ w,s:水平分隔窗口
ctrl+w (用箭头在窗口间跳转)
定制vim的工作特征:
:set nu (给行编号)
:set unnu(撤销编号)
写在/etc/vimrc, ~/.vimrc里则永久有效
:set ai 自动缩进
:set noai(关闭自动缩进功能)
set sm(显示哪个括号跟哪个括号匹配)
set nosm(关闭功能)
写在家目录~/.vimrc中就可以自动使用了
syntax on(打开高亮功能)
syntax off(关闭高亮功能)

vim +n file(打开文本编辑器并使光标处于第n行)
vim +/redhat rc.sysinit (光标处于第一次出现redhat的行首)
vim -O(一次打开多个文件,并垂直分割)
vim -o (一次打开多个文件,并水平分割)
vimtutor (进入vim教程)
------------------------------------------------------------------------------------------------
附: 脚本编辑脚本vim.sh 目前实现功能:
Version 0.0.1
1.可自动添加首行信息(包括:创建时间,文件名). 2.编辑完成检测是否有语法错误,并可选择是否返回编辑. 3.自动添加可执行权限(属主及属组用户).
Version 0.0.2
4.通过使用函数简化了语句.
Version 0.0.3
5.当脚本完成编辑并且检测语法没有出错,则选择是执行脚本或调试脚本,或者退出.
Version 0.0.4
6.修正BUG:
   当脚本执行错误后返回值依然为0
------------------------------------------------------------------------------------------------
#!/bin/bash
#: Title:vim.sh
#: Synopsis:
#: DataTime: 
#: Version: 0.0.4
#: author: Weiwei
#: Option:
 
find $1 &> /dev/null || cat >>$1<<EOF
#!/bin/bash
#: Title:$1
#: Synopsis:
#: DataTime: `date "+%F %T"`
#: Version: 0.0.1
#: author: Weiwei
#: Option:

EOF
vim +8 $1
function PANDUAN()
{
  bash -n $1 &> /dev/null
  echo $?
}
#判断脚本中的语法错误

while [ `PANDUAN $1` -ne 0 ]; do
  echo "There maybe some broblems.Do you want eidt again?"
  echo "(Q or q to quit)"
  read B
  BB=`echo $B | tr 'a-z' 'A-Z'`
  if [ "$BB" = 'Q' ]; then
     exit 1
  fi
  vim +8 $1
done
echo "All Right"
chmod ug+x $1

#以上语句为编辑脚本并检测语法错误

function LASTDO()
{    
 echo "What do you want to do?"
 echo "Q|q for quit; T|t for test; E|e for execute"
 read -p "Your command: " D
 C=`echo $D | tr 'a-z' 'A-Z'`
}

#函数EXITNUM() 用于取得脚本执行后的返回值并以该返回值结束脚本

function EXITNUM()
{
   EN=`echo $?`
   exit $EN
}


LASTDO
while true; do
 if [ "$C" = 'Q' ]; then
    exit 0
   elif [ "$C" = 'T' ]; then
    bash -x $1
    EXITNUM
   elif [ "$C" = 'E' ]; then
    bash $1
    EXITNUM

   else
    echo "There is someting wrong with your Command"
    LASTDO
 fi
done  

#以上语句为编辑成功后选择是否执行或调试脚本.