vi/vim 编辑器

打开文件:

#vi [option][file..]

+#:打开文件后,直接让光标处于第#行的行首;

#/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;


(1)模式转换:

  编辑模式:默认模式

      编辑模式 --->输出模式:

       i:insert,在光标所在处输入

       a:append,在光标所在处后发输入

       o:在光标所在处的下方打开一个新行

       I:在光标所在的行首输入

       A:在光标所在的行尾输入

       O:在光标所在的处的上方打开一个新行


输入模式---->编辑模式

ESC

编辑模式------->末行模式

:

末行模式------->编辑模式

ESC


(2)关闭文件:

ZZ:保存并退出


末行模式退出

:q 文件不改变直接退出

:q!强制退出,不保存此前的编辑操作

:wq 保存修改并退出


(3)光标跳转操作

a、字符间跳转

h:左跳转一个字符

l:右跳转一个字符

j:向下跳转一个字符

k:向上跳转一个字符


b、单词跳转

w:跳转到下一个单词的词首

b:跳转到当前或前一个单词的词首

e:当前或者后一个单词的词尾


c、行首行尾跳转

^:跳转到行首第一个非空白字符;

0:跳转到行首

$:跳转至绝对行尾


d、行间跳转

#G:跳转至由#所指定的行,如果跳转到文件首部第一行开始,1G,跳转到文件尾部(最后一行首部),G


e、句间跳转

f、段间跳转

}

{

截屏:

Ctrl+f:向文件尾部翻一屏

Ctrl+b:向文件首部翻一屏

Ctrl+d:向文件尾部翻半屏

Ctrl+u:向文件首部翻半屏

Enter:直接向后翻


vim编辑命令:

字符编辑:

x:删除光标所在处的字符

#x:删除光标所在处起始的#个字符

xp:交换光标所在处的字符与其后面的字符的位置


替换命令(replace):

r:替换光标所在处的字符

rCHAR

删除命令:

d:删除命令,可以结合光标跳转字符,实现范围删除

d$:跳转至行尾

dw:删除一个字符

de:

db:

dd:删除光标所在的行

粘贴命令:

p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方

P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方


其他编辑操作:


可视化模式:

v:按字符选定

V:按行选定

    结合编辑命令使用,d,c,y



撤销(undo)操作:

u:撤销此前的操作

  #u:撤销此前的撤销操作


重复前一个编辑操作:

.


vim 末行模式:

 內建的命令行接口

(1)地址定界

 :start_pos[,end_pos]

    #:特定的第#行,例如5即第5行;

    .:当前行,.+3当前行向右3行

    $:最后一行

    .,$-1:表示从当前行到倒数第2行

    1,$:表示从第1行到最后一行,即全文

    %:也是表示全文

    #,#:指定行范围,左侧为起始行,右侧为结束行;

    #,+#:指定行范围,左侧为初始行绝对编号,右侧为相对左侧行号的偏移量;例如:3,+7

    /pattern/ :表示从光标所在处起始向文件尾部第一次被模式所匹配到的行;

    /first/,$:表示第一次匹配到到first的行到最后

    /part1/,/part2/:从光标所在处起始,第一次有part1匹配到的行开始,至第一次由part2匹配的行结束之间的所有行

这些定界符开跟编辑命令组合使用,实现编辑操作:

d

y

c

w /path/to/soomefile:将范围内的文本保存至指定文件中;

这里要注意:首先要选中要保存的内容,然后再输入上述命令,尤其是在将文件中的部分内容保存起来时候该方式特别有用

r /path/from/somefile:将指定的文件中的文本读取并插入至指定位置,用于文件两个文件合并

在一般模式下,hostname.sh脚本中的内容添加到当前文件中:

r /root/hostname.sh


(2)查找

/PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串

?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串

n:下一个,与命令方向相同

N:上一个,与命令方向相反


(3)查找并替换

s:末行模式的命令;使用格式

s/要查找的内容/替换为的内容/修饰符


要查找的内容:可以使用正则表达式

替换为的内容:不能使用正则表达式,但可以引用;

如果"要查找的内容"部分在模式中使用了分组符号;在"替换为的内容"中使用后向引用;

直接引用查找模式匹配到的全部文本;

修饰符:

i:忽略大小写;

g:全局替换,意味着一行中如果匹配到多次,则均替换:

可以把分隔符替换为其他的非常用的字符:

s@@@

s###


vim的多文件功能:

多文件

vim file1 file2...

在文件间切换:

:next 下一个

:prev 上一个

:first 第一个

:last 最后一个

退出所有文件:

:wqall 保存所有文件并退出

:all保存所有文件

:qall 退出所有文件

多窗口:

-o:水平分割窗口

-O:垂直分割窗口


在窗口间切换:Ctrl+w,ARROW

注意:单个文件也可以分割为多个窗口进行查看

Ctrl+w,s:水分割窗口

Ctrl+w,v:垂直分割窗口



定制vim的工作特性:

 注意:在末行模式下的设定,仅对当前vim进程有效;

永久有效:

 全局:/etc/vimrc

 用户个人: ~/.vimrc

1、行号

   显示:set number,简写为set nu

   取消显示: set nomber,set nonu

2、括号匹配高亮

   匹配:set shownmatch, set sm

   取消:set noshowmatch,nosm


3、自动缩进

   启用: set ai

   禁用: setnoai

4、高亮搜索

   启用: set hlsearch

   禁用: set nohlsearch

5、语法高亮

    启用:syntax on

    禁止:syntax off

6、忽略字符大小写

   启用:set ic

   禁用:set noic


获取帮助:

:help

:help subject


bash脚本编程之算术运算

+,-,*,、,**,%

算术运算格式:

(1)let VAR=算术运算表达式

(2)var=$[算术表达式]

(3)var=$((算术运算表达式))

(4)var = $(expr $ARG1 $OP $ARG2)


注意:乘法符号在有些场景中需要使用转义符