二、Linux入门之VIM编辑器
vim文本编辑工具
常用功能
模式切换、环境设置、光标移动、剪切/删除复制粘贴、撤消重做、搜索替换、文件分屏编辑、保存退出及其他常用操作模式切换
vim常用模式有:
1、命令模式(Command mode),vim一启动便进入命令模式;
2、输入模式(Insert mode),在命令模式下输入以下字母进入输入模式,并在光标跳转的位置开始输入,按Esc回到命令模式
i:光标位置不变
I:光标跳到行首
a:光标跳到下一个字符
A:光标跳到行尾
o:在光标当前行下方插入一个空行
O:在光标当前行的上方插入一个空行
3、底线命令模式(Last line mode),在命令模式下输入 : 进入底线命令模式,按Enter回到命令模式
4、取代模式(Replace mode),在命令模式下输入r(只取代光标所在位置,只执行一次,结束后返回命令模式),或输入R(持续取代光标所在位置,直到按Esc回到命令模式)进入取代模式
环境设置,工作在底线命令模式:
设置tab键间隔
设置tab键间隔为4个字符 set tabstop=4
行号显示
显示: set number,简写 set nu
取消显示: set nonumber, 简写 set nonu
忽略字符的大小写
启用: set ignorecase,简写 set ic
不忽略: set noic
自动缩进
启用: set autoindent,简写 set ai
禁用: set noai
复制保留格式
启用: set paste
禁用: set nopaste
显示Tab和换行符 ^I 和$显示
启用: set list
禁用: set nolist
高亮搜索
启用: set hlsearch
禁用: set nohlsearch
语法高亮
启用: syntax on
禁用: syntax off
文件格式
启用windows格式: set fileformat=dos
启用unix格式: set fileformat=unix 简写 set ff=dos|unix
设置文本宽度
set textwidth=65 (vim only)
set wrapmargin=15
设置光标所在行的标识线
启用: set cursorline,简写 set cul
禁用: set nocursorline
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
配置.vimrc文件,实现在创建新脚本文件时自动生成基本格式
vim .vimrc
autocmd BufNewFile *.sh exec “:call SetTitle()”
func SetTitle()
if expand(“%:e”) == ‘sh’
call setline(1,”#!/bin/bash”)
call setline(2,”#********************************”)
call setline(3,”#Author: Test”)
call setline(4,”#Link: 12345678901”)
call setline(5,”#Date: ”,.strftime(“%Y-%m-%d %H:%M:%S”))
call setline(6,”#File Name: ”.expand(“%”))
call setline(7,”#Description: Script title”)
call setline(8,”#********************************”)
call setline(9,””)
endif
endfunc
autocmd BufNewFile * normal G
光标移动,工作在命令模式,移动方式有:
1、行/列间移动:
0:跳到行首 $:跳到行尾 +:下移 -:上移
h:左移 j:下移 k:上移 l:右移)
空格键:右移,行结束后自动跳到下一行行首 回车键:下移
以上命令除0、$、+、-外,其他命令使用“数字n+命令”可使光标直接移动n个位置,移动方向由命令决定
w:下一单词词首 e:当前或下一单词词尾 b:当前或前一单词词首
2、页间移动:
G:文件尾 gg:文件头 nG:移动到第n行,1G相当于gg
Ctrl+f:向下移动一页 Ctrl+b:向上移动一页
Ctrl+d:向下移动半页 Ctrl+u:向上移动半页
H:移动到当前页的首行 M:移动到当前页的中间行
L:移动到当前面的尾行
剪切/删除复制粘贴,工作在命令模式:
1、剪切/删除,剪切与删除共用命令:
x:向后删除,del键 X:向前删除,Backspace
nx:连续删除n个字符 d0:删除从当前位置到行首的字符
d$:删除从当前位置到行尾的字符 dd:删除整行
ndd:删除从当前行起往下n行 d1G:删除文件第一行到当前所在行
dG:删除当前所在行到文件最后一行
2、复制:
y0:复制从当前位置到行首的字符 yd$:复制从当前位置到行尾的字符
yy:复制光标当前一行 nyy:复制当前行起往下n行
y1G:复制当前行到文件第一行 yG:复制当前行到文件最后一行
3、粘贴:
p:粘贴在光标位置后面) P:粘贴在光标位置前面
撤消重做,工作在命令模式:
1、撤消:u,撤消前一个操作
2、重做:Ctrl+r,重做上一个动作
搜索替换,工作在底线命令模式:
1、搜索:
/:向下搜索
?:向上搜索,进入搜索模式时使用字符n搜索下一下,N与n搜索方向相反,搜索要区分大小写
2、替换:
n1,n2s/word1/word2/g:在第n1与n2行之间查找word1这个字符串,并将该替换为word2
1,$s/word1/word2/g 或 :%s/word1/word2/g:从第1行到最后1行查找word1 字符串,并替换为word2
1,$s/word1/word2/gc 或 :%s/word1/word2/gc:从第1行到最后1行查找 word1字符串,并替换为word2,且在取代前显示提示字符给用户确认(confirm)是否需要取代
文件分屏编辑,工作在命令模式:在窗口间切换:Ctrl+w, Arrow;:wqall 退出
1、单文件:
Ctrl+w,s: split, 水平分割 Ctrl+w,v: vertical, 垂直分割
Ctrl+w,q:取消相邻窗口 Ctrl+w,o: 取消全部窗口
2、多文件:vim -o/-O FILE1 FILE2 ...
-o: 水平分割 -O: 垂直分割
3、打开多文件 vim FILE1 FILE2 FILE3 ...
:next 下一个 :prev 前一个
:first 第一个 :last 最后一个
:wall 保存所有 :qall 退出所有
:wqall
保存退出,工作在底线命令模式
w(保存) q(退出)
ZZ(保存退出,命令模式) ZQ(不保存退出,命令模式)
其他常用操作,工作在底线命令模式:
1、!command 执行命令
2、r!command 读入命令的输出
3、r filename 读文件内容到当前文件中
4、w filename 将当前文件内容写入另一个文件
关于VIM的小练习
1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
答:在底线命令模式(Last line mode)下执行:1,$s/^ \+//
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
答:在底线命令模式(Last line mode)下执行:1,$s/^\( \+\)/#\1/
3、在vim中设置tab缩进为4个字符
答:在底线命令模式(Last line mode)下执行:set tabstop=4
4、复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
答:在底线命令模式(Last line mode)下执行:1,$s/\/etc\/sysconfig\/init/\/var\/log/
5、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
答:在底线命令模式(Last line mode)下执行:1,$s/^#\( \+\)/\1/