📄 0310vi.htm
字号:
<li>『vi man.config』
<li>『:set nu』
<li>先按下『58G』再按下『40→』会看到『/dir/bin/foo』这个字样在双引号内;
<li>先执行『1G』或『gg』后,直接输入『/bzip2』,则会去到第 116 行才对!
<li>直接下达『 :50,100s/man/MAN/gc 』即可!
<li>(1)简单的方法可以一直按『 u 』回复到原始状态,(2)使用不储存离开『 :q! 』之后,再重新读取一次该档案;
<li>『51G』 然后再『 10yy 』之后按下『 G 』到最后一行,再给他『 p 』贴上十行!
<li>『11G』 之后,再给他『 20dd 』即可删除 20 行了;
<li>:w man.test.config
<li>『29G』 之后,再给他『 15x 』即可删除 15 个字元;
<li>『:wq!』
</ol></font></span>
如果您的结果都可以查的到,那么 vi 的使用上面应该没有太大的问题啦!剩下的问题会是在┅..打字练习┅。<br><br>
</div>
<hr><a name="vi_temp"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>关于档案的回复与暂存档</span><br>
<div class=block2>
另外,其实 vi 是具有『可回复』功能的呢!那么 vi 凭什么帮我们进行回复的功能呢?
很简单啊!凭暂存档啊!举例来说,当我们编辑一个档案时,假设名称为 /tmp/passwd ,
那么在这个 /tmp 底下就会有一个暂存档案,档名为『 <span class=text_import2><font
face="细明体">/tmp/.passwd.swp</font></span> 』,这是一个隐藏档,
我们所进行的一些修改都会暂时存在这个档案当中,万一在档案修改过程中,
系统挂了,那么下次你再重新 vi /tmp/passwd 时,系统就会告诉您,是否需要回复『Recovery』成修改过程中的模样?
如果您按下 (R) ,嘿嘿!就可以将资料回复到修改过程的样子,而不是原始档案棉!
这是个很有用的功能喔! ^_^<br><br>
这也就是说,如果有一天,您去 /tmp 底下,执行 ls -al 时,发现到底下有两个档案,
档名分别为 passwd 与 .passwd.swp 的话,那么 <span class=text_import2>(1) 可能有人在编辑这个档案;
(2) 之前您在编辑这个档案时,因为某些不知名的因素导致 vi 程式中断,则该暂存档就会存在。</span>
如果是状态 (2) ,则此时您可以将该 .passwd.swp 档案删除,或者是,直接 vi /tmp/passwd ,
在 vi 出现是否回复时,选择回复,然后储存更新 /tmp/passwd ,之后再将这个 /tmp/.passwd.swp 档案删除即可!
如果不删除的话,那么每次编辑这个档案,都会告知您该档案有问题啊! @_@<br><br>
</div>
</div>
<hr><a NAME="vim"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">vim 的额外功能</span><br>
<div class=block1>
其实,目前大部分的 distributions 都以 vim 取代 vi 的功能了!
如果您使用 vi 后,却看到画面的右下角有显示目前游标所在的行列号码,
那么您的 vi 已经被 vim 所取代棉~
为什么要用 vim 呢?因为 vim 具有颜色显示的功能,并且还支援许多的程式语法 (syntax),
因此,当您使用 vim 编辑程式时( 不论是 C 语言,还是 shell script ),
我们的 vim 将可帮您直接进行『程式除错 (debug)』的功能!真的很不赖吧!^_^<br><br>
如果您在文字模式下,输入 alias 时,出现这样的画面∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>alias</span>
alias vi='vim'
</pre></td></tr></table>
这表示当您使用 vi 这个指令时,其实就是执行 vim 啦!如果您没有这一行,那么您就必须要使用 vim filename
来启动 vim 棉!基本上, vim 的一般用法与 vi 完全一模一样~没有不同啦!那么我们就来看看 vim
的画面是怎样棉!假设我想要编辑 /etc/man.config ,则输入『<span class=text_import2>vim /etc/man.config</span>』<br>
<table class="term"><tr><td class="term"><pre>
<span style="background-color:white; color:black">#</span>
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.5p
#
# For more information about this file, see the man pages man(1)
# and man.conf(5).
<span class=term_write>"man.config" 138L, 4506C 1,1 Top</span>
</pre></td></tr></table>
上面的图示是 vim 一画面一角~他有几个特色要讲∶<ol>
<li>最底下一行说明这个档案的特色,包括 138 行,共 4506 字元等等。
<li>那个 1,1 代表目前游标在第一行的第一个字元上。您可以看到第一行有个游标的存在啊!
<li>那个 Top 则表示,这个画面是整个档案的最上方!</ol>
至少就有这些资讯。而在您移动游标时,那个 1,1 的游标定位也会跟著变动,是否很方便啊!
好了,底下我们就来谈一谈其他 vim 的用法吧!<br><br>
<hr><a name="vim_v"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>区块选择(Visual Block)</span><br>
<div class=block2>
刚刚我们提到的简单的 vi 操作过程中,几乎提到的都是以行为单位的操作。那么如果我想要搞定的是一个区块范围呢?
举例来说,像底下这种格式的档案∶<br>
<table class="term"><tr><td class="term"><pre>
<span class=term_write>192.168.1.1 host1.class.net
192.168.1.2 host2.class.net
192.168.1.3 host3.class.net
192.168.1.4 host4.class.net
<span class=term_say>.....中间省略......</span></span>
</pre></td></tr></table>
这个档案我将他放置到 <A href="0310vi/hosts">http://linux.vbird.org/linux_basic/0310vi/hosts</a>
,您可以自行下载来看一看这个档案啊!
如果我想要复制的只是前面的 IP 数字部分,后面的主机名称部分就不给他复制,那怎么办?
这个时候就得需要使用区块选择(Visual Block)的功能了。当我们按下 v 或者 V 或者 [Ctrl]+v 时,
这个时候游标移动过的地方就会开始反白,这三个按键的意义分别是∶<br><br>
<table width=95% border=1 cellspacing=0 cellpadding=3 bgcolor=lightyellow>
<tr bgcolor=lightblue align=center><td colspan=2>区块选择的按键意义</td></tr>
<tr><td align=center><font face="细明体">v</font></td><td>字元选择,会将游标经过的地方反白选择!</td></tr>
<tr><td align=center><font face="细明体">V</font></td><td>行选择,会将游标经过的行反白选择!</td></tr>
<tr><td align=center><font face="细明体">[Ctrl]+v</font></td><td>区块选择,可以用长方形的方式选择资料</td></tr>
<tr><td align=center><font face="细明体">y</font></td><td>将反白的地方复制起来</td></tr>
<tr><td align=center><font face="细明体">d</font></td><td>将反白的地方删除掉</td></tr>
</table><br>
我们以上面的 IP 对应主机名称为范例,如果想要复制的是 IP 的话,而且仅想要前面四行,
那么我可以∶<ol>
<li>将游标移动到第一行的第一个字元 ( 1G );
<li>然后按下 [Ctrl]+v (按著 [ctrl] 不放,再按下 v );
<li>然后移动方向键,向下向右移动数格,让整个反白区域涵盖 191.168.1.1 到 192.168.1.4 ;
<li>按下 y 复制 (此时反白会自动的不见) ;
<li>移动到任何想要插入的区域,按下 p 就可以插入刚刚复制的区块内容!举例来说,移动到第
1 行的第 13 个字元处按下小写的 p ,看看会怎样?</ol>
这个区块选择在已经格式的档案中,就会显的很有帮助喔!尤其是我们想要大量复制其中一个区块,
而不是整行复制的场合中,就会很有用的啦!<br><br>
</div>
<hr><a name="vim_files"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>多档案编辑</span><br>
<div class=block2>
假设一个例子,你想要将刚刚我们的 hosts 内的 IP 复制到您的 /etc/hosts 这个档案去,
那么该如何编辑?我们知道在 vi 内可以使用 :r filename 来读入某个档案的内容,
不过,这样毕竟是将整个档案读入啊!如果我只是想要部分内容呢?呵呵!这个时候多档案同时编辑就很有用了。
我们可以使用 vim 后面同时接好几个档案来同时开启喔!相关的按键有∶<br><br>
<table width=95% border=1 cellspacing=0 cellpadding=3 bgcolor=lightyellow>
<tr bgcolor=lightblue align=center><td colspan=2>多档案编辑的按键</td></tr>
<tr><td align=center><font face="细明体">:n</font></td><td>编辑下一个档案</td></tr>
<tr><td align=center><font face="细明体">:N</font></td><td>编辑上一个档案</td></tr>
<tr><td align=center><font face="细明体">:files</font></td><td>列出目前这个 vim 的开启的所有档案</td></tr>
</table><br>
这个功能也很棒啊!现在您可以做一下练习看看说!假设您要将刚刚鸟哥提供的 hosts 内的 IP 复制到您的
/etc/hosts 档案内,那可以怎么进行呢?可以这样啊∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi hosts /etc/hosts</span>
<span class=term_say># 在这个档案中利用上个小节提到的区块选择,按下 [ctrl]+v 来进行区块选择,并复制。
# 然后按下 :n 在指令列的地方输入这玩意儿,就会转到下一个档案去,这个时候,
# 就可以按下 p 将刚刚复制的 IP 给贴到您的档案中棉!如果您按下 :files ,则∶</span>
<hr>192.168.1.4 host4.class.net
192.168.1.5 host5.class.net
<font color=blue>~
~</font>
<span class=term_write>:files</span>
1 %a "hosts" line 1
2 # "/etc/hosts" line 1
<font color=green>Hit ENTER or type command to continue</font>
<hr>
<span class=term_say># 看到否?在指令列输入 :files 就可以显示目前所编辑的档案资讯棉!</span>
</pre></td></tr></table>
看到了吧?利用多档案编辑的功能,可以让您很快速的就将需要的资料复制到正确的档案内。
当然棉,这个功能也可以利用视窗介面来达到,那就是底下要提到的多视窗功能。<br><br>
</div>
<hr><a name="vim_ws"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>多视窗功能</span><br>
<div class=block2>
想像两个情况∶<ul>
<li>当我有一个档案非常的大,我查阅到后面的资料时,想要『对照』前面的资料,
是否需要使用 [ctrl]+f 与 [ctrl]+b 来跑前跑后查阅?
<li>我有两个需要对照著看的档案,不想使用前一小节提到的多档案编辑功能;</ul>
这样的情况下,开一个 vim 里头有两个视窗的环境,就有需要啦!那么如何开启新视窗呢?
很简单啊!在指令列模式输入∶『:sp {filename}』,那个 filename 可有可无,
如果想要在新视窗启动另一个档案,就加入档名,否则仅输入 :sp 时,
出现的则是同一个档案在两个视窗间!例如鸟哥使用 vim hosts 后,再以 :sp /etc/hosts ,
结果出现如下图示∶<br>
<table class="term"><tr><td class="term"><pre>
<font color=blue># Do not remove the following line, or various programs
# that require network functionality will fail.</font>
127.0.0.1 localhost.localdomain localhost
192.168.1.11 vbird-work
192.168.1.2 vbird-server
<font color=blue>~</font>
<span style="background-color:white; color:black">/etc/hosts 5,1 All</span>
192.168.1.1 host1.class.net
192.168.1.2 host2.class.net
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -