linux vim拷贝if tab,vim文本编辑器

vi简介

vi:Visual Interface,是一种功能强大的文本编辑器,工作在字符模式下,它可执行输出、输出、查找、替换、块等众多文本操作,不需要图形界面,因此执行起来效率会非常高,主要用来编辑纯文本文件,常见的编码有,ASCII,Unicode等等

文本编辑器的种类:

行编辑器:逐行来对文本进行处理的工具,如sed

全屏编辑器:占据整个屏幕进行编辑,如nano,vi

vim工作模式

输入模式:在文本文件当中输入内容

命令模式:可执行一些编辑命令

末行模式:vim内置的命令行接口,执行vim的内置命令

vim的使用

打开文件

vim [OPTIONS] FILE…

+#:打开文件光标处在第#行

+:打开文件光标处在最后一行

+/pattern:打开文件光标处在第一次被pattern所匹配到的行

-b:二进制方式打开文件

-d:比较两个文件的不同之处

-m:制度方式打开文件

模式转换

默认为命令模式

命令模式 –> 输入模式

-i:在当前光标处输入

-a:在当前光标后方输入

-o:在当前光标下方新建一行转为输入

-I:在当前光标所在行的行首输入

-A:在当前光标所在行的行尾输入

-O:在当前光标上方新建一行转为输入

锁定和解锁:

ctrl+s:锁定

ctrl+q:解锁

输入模式 –> 命令模式

编辑模式 –> 末行模式

:

末行模式 –> 编辑模式

Esc、Esc

注意:输入模式需要先转为命令模式然后再转为末行模式

关闭保存文件:

命令模式

ZZ:保存并退出

ZQ:不保存退出

末行模式:

w:保存文本不退出

q:不保存退出

wq:保存并退出

wq!:强制保存并退出

x:保存并退出

w /PATH/TO/SOMEFILE:将文件内容保存至指定文件中

r /PATH/TO/SOMEFILE:将指定文件的内容读取至当前文件中

! COMMAND:可临时执行shell命令

r! COMMAND:将命令的执行结果添加至当前光标下方

光标跳转:

字符间跳转:

h:左

j:下

k:上

l:右

#COMMAND:跳转#个字符

单词间跳转:

w:跳转至下个单词的词首

e:跳转至下个单词的词尾

b:跳转至上个单词的词首

#COMMAND:跳转#个单词

行尾行首跳转:

^:非空白字符行首

0:绝对行首

$:跳转至行尾

当前页面跳转

H:页首

M:页中

L:页尾

行间跳转:

#G:跳转至第#行

G:跳转至尾行

gg:跳转至首行

句间跳转:以.为分隔

):跳转下一句

(:跳转上一句

段落跳转:以空行为分隔符

}:跳转至下一段落

{:上一段落

翻屏操作:

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

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

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

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

Enter:逐行向后翻

命令模式操作:

字符编辑:

x:删除光标处的字符

#x:删除光标以右的#个字符

xp:当前光标所在处的字符与光标后的字符做交换

~:转换大小写

替换命令:

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

R:开启替换模式

删除命令:

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

d^:删除当前光标所在行以左的所有字符

d$:删除当前光标所在行以右的所有字符

dw:删除当前光标所在处下一个单词

de:删除当前光标所在处的下一个单词

db:删除当前光标所在处的上个单词

dd:删除光标所在处的一整行

#dd:删除光标所在行开始向下#行

D:等于d$

复制命令:

y:复制,可结合光标跳转字符

y$:复制光标所在行以右的所有字符

y^:复制光标所在行以左的所有字符

yw:复制光标所在处下个单词

ye:复制光标所在处下个单词

yb:复制光标所在处上个单词

y0:复制光标所在行以左的所有字符,包含空白字符

yy:复制当前光标所在行

#yy:复制光标所在行向下#行

Y:复制光标所在行

粘贴命令:

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

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

改变命令:

c:编辑模式 –> 输入命令,实现删除操作

c$:删除光标所在处以右的所有字符并转为输入模式

c^:删除光标所在处以左的所有字符并转为输入模式

c0:删除光标所在处以左的所有字符并转为输入模式,包含空白字符

cw:删除光标所在处下一个单词并转为输入模式

ce:删除光标所在处下一个单词并转为输入模式

cb:删除光标所在处上一个单词并转为输入模式

cc:删除光标所在行并转为输入模式

#cc:删除当前光标所在行向下#行并转为输入模式

C:删除当前光标至行尾并转为输入模式

一次性复制粘贴多次内容:

100i zhai Esc:zhai可粘贴100次

可视化模式:

v:按字符选定

V:按行选定

可结合编辑命令:d,c,p,y

Ctrl+v:面向块

撤销操作:

u:撤销前一次操作

#u:撤销前#次操作

U:撤销光标所在行所有此行的更改操作

.:重复前一次操作

n.:重复前n次操作

末行模式:

地址定界

:start_line,end_line

#:指定的单个行

#,#:从左侧的#行开始,到右侧之间的所有行

#,+n:从左侧的#行开始向后加n行

.:当前行

$:最后一行

$-1:表示倒数第二行

%:表示全文,相当于1,$

/pat1/,/pat2/:第一次被pat1所匹配到的行到第一次被pat2所匹配到的行结束,之间的所有内容

#,/pat/:从指定的行开始到被第一次被pat匹配到的行结束,之间的所有内容

/pat/,#:从第一次被pat匹配到的行开始到第#行结束,之间的所有内容

后面可跟编辑命令:

d:删除

y:复制

w /PATH/TO/FILE:将范围内的行保存至指定文件中

r /PATH/TO/FILE:将指定文件的内容插入指定的所有行处

查找:

/PATTERN:从当前光标所在处向文件尾部查找

?PATTERN:从当前光标所在处向文件首部查找

n:光标跳转至下一个被查找到的内容

N:与n相反

vim寄存器:

有26个命名寄存器和1个无命名寄存器,存放至不同剪切板中

a,b,…,z用"寄存器表示,存放在数字和命令之间

如:3"ayy表示复制3行达到a寄存器中

"ap:表示将a寄存器中的内容粘贴

编辑二进制文件:

vim -b BINFILE

扩展命令模式下,利用xxd命令转换为可读的十六进制

:%!xxd

编辑二进制文件

扩展命令模式下,利用xxd命令转换回二进制

:%!xxd –r

多文件模式:

vim FILE1 FILE2 FILE3 …

:next 下一个文件

:prev 上一个文件

:last 最后一个文件

:first 第一个文件

:wall 保存所有

:qall 不保存退出所有

:wqall 保存所有并退出

使用多窗口:

多文件分割

vim -o|O FILE1 FILE2 FILE3 …

-o:水平分割

-O:垂直分割

在窗口间切换:Ctrl+w,左右箭头

单个文件:

Ctrl+w,s:水平分割

Ctrl+w,v:垂直分割

Ctrl+w,q:取消相邻窗口

Ctrl+w,o:取消全部窗口

:qall 退出所有

定义vim工作特性:

配置文件:永久有效

全局:/etc/vimrc

用户:~/.vimrc

扩展模式:当前vim进程有效

(1)行号

显示行号:set number可简写为set nu

取消行号:set nonumber可简写为set nonu

(2)括号成对匹配

匹配:set showmatch可简写为set sm

取消匹配:set noshowmatch可简写为set nosm

(3)自动缩进

缩进:set ai

取消:set noai

(4)高亮搜索

启用:set hlsearch

禁用:set nohlsearch

(5)语法高亮

启用:syntax on

禁用:syntax off

(6)忽略字符大小写

启用:set ic

禁用:set noic

(7)文件格式

启用:fileformat=unix

禁用:fileformat=dos

vim内置帮助

:help

vimtutor

练习及作业:

1.复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

47 HOSTNAME=`/bin/hostname 2>/dev/null`

48 HISTSIZE=1000

49 if [ "$HISTCONTROL" = "ignorespace" ] ; then

50 export HISTCONTROL=ignoreboth

51 else

52 export HISTCONTROL=ignoredups

53 fi

54

55 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

56

57 # By default, we want umask to get set. This sets it for login shell

58 # Current threshold for system reserved uid/gids is 200

59 # You could check uidgid reservation validity in

60 # /usr/share/doc/setup-*/uidgid file

61 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then

62 umask 002

63 else

64 umask 022

65 fi

66

67 for i in /etc/profile.d/*.sh ; do

68 if [ -r "$i" ]; then

69 if [ "${-#*i}" != "$-" ]; then

70 . "$i"

71 else

72 . "$i" >/dev/null 2>&1

73 fi

74 fi

75 done

76

77 unset i

78 unset -f pathmunge

:%s@^[[:space:]]\+@@

2.复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号

949 #       [ -z "$key" ] && plymouth --hide-splash

950 #       /sbin/cryptsetup $params ${key:+-d $key} create "$dst" "$src" /dev/null && success || failure

951 #       rc=$?

952 #       [ -z "$key" ] && plymouth --show-splash

953 #   fi

954 #   if [ $rc -ne 0 ]; then

955 #       ret=1

956 #       continue

957 #   fi

958 #   if [ -b "/dev/mapper/$dst" ]; then

959 #       if [ "$makeswap" = "yes" ]; then

960 #       mkswap "/dev/mapper/$dst" 2>/dev/null >/dev/null

961 #       fi

962 #       if [ "$mke2fs" = "yes" ]; then

963 #       if mke2fs "/dev/mapper/$dst" 2>/dev/null >/dev/null \

964 #           && mdir=$(mktemp -d /tmp/mountXXXXXX); then

965 #           mount "/dev/mapper/$dst" "$mdir" && chmod 1777 "$mdir"

966 #           umount "$mdir"

967 #           rmdir "$mdir"

968 #       fi

969 #       fi

970 #   fi

971 #    done 

972 #    return $ret

973 }

974

975 # A sed expression to filter out the files that is_ignored_file recognizes

976 __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'

977

978 #if we have privileges lets log to kmsg, otherwise to stderr

979 if strstr "$(cat /proc/cmdline)" "rc.debug"; then

980 #        [ -w /dev/kmsg ] && exec 30>/dev/kmsg && BASH_XTRACEFD=30

981 #        set -x

982 fi

:%s@^[[:space:]]\+@#&@

作业题:

1.如何设置tab缩进为4个字符?

在末行模式输入set ts=4即可

2.复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3.删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号

3c8ce6380daa33c267ccb0e2e66a02de.png

原创文章,作者:zhai796898,如若转载,请注明出处:http://www.178linux.com/32859

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值