前言:
vim的marks命令指的是标记文本文件或者文本文件的某一列,从而实现快速跳转。那么,这个命令的实际意义在于提升文本编辑的效率,毕竟,如果有大量的文本文件需要编辑,那么,在各个文件之间的跳转是十分有效率的一件事情。(说人话,这个命令是锦上添花的,不是雪中送炭的命令,会使用这个命令会极大的提高你的文本编辑效率,不会也没关系,仅仅是编辑文本的速度慢许多而已)。
文本间的跳转示例:
比如,我有这么三个文件,tomcat1.service,tomcat2.service,tomcat3.service,这三个文件的位置是在不同的地方,比如,一个在a目录下,一个在b目录下,一个在c目录下。这三个文件的内容如下:
tomcat1.service
[Unit]
Description=web server tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk"
PIDFile="/usr/local/tomcat1/bin/tomcat.pid"
ExecStart=/usr/local/tomcat1/bin/startup.sh
ExecReload=/bin/kill -s HUP
ExecStop=/bin/kill -s QUIT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
tomcat2.service
[Unit]
Description=web server tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk"
PIDFile="/usr/local/tomcat2/bin/tomcat.pid"
ExecStart=/usr/local/tomcat2/bin/startup.sh
ExecReload=/bin/kill -s HUP
ExecStop=/bin/kill -s QUIT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
tomcat3.service
[Unit]
Description=web server tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk"
PIDFile="/usr/local/tomcat3/bin/tomcat.pid"
ExecStart=/usr/local/tomcat3/bin/startup.sh
ExecReload=/bin/kill -s HUP
ExecStop=/bin/kill -s QUIT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
那么,如果不会使用这个marks命令,我们通常编辑这几个文件就是这样的:
[root@hdp-1 ~]# vim tomcat1.service
[root@hdp-1 ~]# vim tomcat2.service
[root@hdp-1 ~]# vim tomcat3.service
也就是手动敲这几个命令,然后在这几个命令之间反复切换,调试文本内容,直到达到我们的文本编辑目的。
如果,我们会使用marks命令的话-----
[root@hdp-1 ~]# vim tomcat1.service
依此类推,tomcat2文件输入命令 makr W 然后回车,tomcat3文件输入命令 mark E 然后回车
此时,我们在打开tomcat1.service 这个文件,如果想要在去调整编辑tomcat3.service 这个文件,那么,此时我们按键盘的 `(也就是波浪线的英文状态)大写E 就可以跳转到tomcat3.service 啦,是不是我们使用mark命令标记每个需要经常编辑的文件后就可以快速的不用管这些文件是在哪个目录下,都可以有快捷方式快速的跳转到想编辑的文件啦???这样的操作会给你飞一般的体验哦(其实,`Q `W `E 就相当于我们自己给这三个文件定义了相应的快捷跳转键啦)。
marks命令详解:
以上是使用了一个例子来讲解文本文件之间的快速跳转的好处。
那么,我们应该考虑一下了,这个marks 记录这些跳转标识有多少时间呢?答案是会一直保持记录,即使重启服务器。所以,如果你在某个经常使用的服务器上,有一些经常需要编辑修改的文件,那么,请你在第一次打开这个文件的时候,在命令行模式下 输入 mark 自定义的一个大写字母 。然后,你可以不用记住这个文件的存放路径,你只需要任意打开一个文本文件,然后 拿起你高贵的左手,按下波浪键和自定义的那个大写字母(注意,此时必须是在normal模式下哦),就可以立刻马上的跳转到那个你日思夜想的文件啦。
Vim允许在打开的文件中放置自定义的标记。命令 mark a
表示用 a
标记当前的光标位置。
可以在文本中使用 26 个标记 (az后AZ)。这些标记是不可见的,只是一个由 Vim 记住的位置。
小写标记值在每个缓冲区(即Vim打开文件)局部可见,而大写标记则全局可见,说人话就是,大写的自定义字母可以作用所有文本文档。
标注 | 设置者 | 使用 |
---|---|---|
a -z |
用户 | 仅对当前的一个文件生效,也就意味着只可以在当前文件中跳转 |
A -Z |
用户 | 全局标注,可以作用于不同文件。大写标注也称为「文件标注」。跳转时有可能会切换到另一个缓冲区 |
0 -9 |
viminfo | 0 代表 viminfo 最后一次被写入的位置。实际使用中,就代表 Vim 进程最后一次结束的位置。1 代表 Vim 进程倒数第二次结束的位置,以此类推 |
要跳到一个你定义的标记,可以使用命令 `{mark}
,这里 {mark} 是指定义标记的那个字母。所以,移到标记a的命令是:`a(注意,此时必须是normal模式哦,而不是命令模式)
Vim自带一些特殊的标记,包括:
命令 | 跳转至 |
---|---|
'[ 与 `[ |
上一次修改或复制的第一行或第一个字符 |
'] 与 `] |
上一次修改或复制的最后一行或最后一个字符 |
'< 与 `< |
上一次在可视模式下选取的第一行或第一个字符 |
'> 与 `> |
上一次在可视模式下选取的最后一行或最后一个字符 |
'' 与 `' |
上一次跳转之前的光标位置 |
'" 与 `" |
上一次关闭当前缓冲区时的光标位置 |
'^ 与 `^ |
上一次插入字符后的光标位置 |
'. 与 `. |
上一次修改文本后的光标位置 |
'( 与 `( |
当前句子的开头 |
') 与 `) |
当前句子的结尾 |
'{ 与 `{ |
当前段落的开头 |
'} 与 `} |
当前段落的结尾 |
这里,比较有用的是最后四行,这个请牢记哦。也就是 `() 和 `{}
那么,如果我是在部署某个服务,这个服务有很多的文件需要修改,我忘记我自定义的那个大写字母是哪个了,怎么办?或者我仅仅只是跳转到某个文件的最后一次更改过的地方,怎么办?
这个就简单了,命令行模式下的 marks命令记录了一切你想知道的信息。比如:
自定义的AEPQW这些对应的哪些文件都写的很明白,连路径都写出来了。这下,聪明如你,应该可以知道我的passwd文件在哪里了吧???(O(∩_∩)O哈哈~)
打开的文件,最后光标定位在哪一行哪一列也不用我说了吧??(line表示行,col表示列)
Linux的vim不得不说,就是这么强大,就是这么能打!!!!!!!!!!!!!