菜鸟vimer成长记——第3章、文件

  上一章一直在讲的是vim的文本的操作,本章主要讲的是vim的文件操作。

  本章的有些概念和传统的文本编辑器也不尽相同。所以需要注意概念或者切切说是思维习惯的区别。

  vim 允许在一个编辑会话中编辑多个文件,我们既可以每次显示一个文件,也可以把工作区分成若干个分割窗口或标签页,每个窗口或标签页包含一个独立的缓冲区。

概念

  在开始学习之前,有必要先弄清楚几个重要的概念:文件、缓冲区、窗口、标签页。以及,他们之间的关系是什么

文件

  这里的文件,指的是存储在磁盘上的文件。在工作过程中,我们通常会说“我们正在编辑一个文件”,但真实情况并不是这样,vim编辑的并不是文件。

缓冲区

  那vim编辑的是什么呢?vim编辑的是文件在内存中的映像,也就是 Vim 术语中的“缓冲区”。

  当 Vim 打开一个文件时,该文件的内容被读入一个具有相同名字的缓冲区。刚开始,缓冲区的内容和文件的内容完全相同,但当我们对缓冲区做出修改时,二者的内容就会出现差别。如果我们决定保留这些修改,就可以再把缓冲区的内容写回到文件里。所以其实我们在vim操作的文本都是针对于缓冲区。

  编辑文件的步骤:

  1. 从文件读到缓冲区
  2. 修改缓冲区的文本。此时原始文件里的文本不会做任何的变化。
  3. 把缓冲区写到文件。此时原始文件的文本才重新又和缓冲区一致。

窗口

  窗口是缓冲区的显示区域。决定要把哪个缓冲区的内容显示在这个区域。

  我们既可以打开多个窗口,在这些窗口中显示同一个缓冲区,也可以在每个窗口里载入不同的缓冲区。

  所有的窗口共享同一个缓冲区列表,即在内存的所有缓冲区。

  缓冲区有以下几个状态:

  • 活动状态:处于这个状态的缓冲区被显示在窗口上。如果一个文件对应的缓冲区被载入内存,一般处于这个状态。
  • 隐藏状态:处于这个状态的缓冲区不会被显示在窗口上。
  • 非活动状态:处于这个状态的缓冲区不会被显示在窗口上。并且什么内容也没有。???具体什么情况,我也还没弄清楚。

标签页

  一个标签页是一系列窗口的集合或者说容器。这里的标签页和其他编辑器的还不太一样。其他的编辑器一个标签页对应的是一个文件对应的缓冲。但是在vim里,一个标签页,更多时候像一个工作空间。

  假设我们正在处理某个工程中的文件,并且已经把工作区分成了几个窗口。然后,突然接到一项紧急任务,我们不得不马上切换工作内容。我们不想在当前标签页里打开新文件,因为这会把我们精心布置的工作区弄乱。此时,我们可以新创一个标签页,并在此标签页中工作。当我们准备继续做原来的工作时,只需切回原来的标签页即可,所有的窗口都保持着我们离开时的模样。

文件

  虽然这里标题叫文件,但是这里面讲的基本上的缓冲区,也稍微涉及到窗口等其他概念。下面会围绕着文件操作的生命周期来展开描述。

  注意事项

  • 所有的操作基本都可以强制操作。统一规则是: :动作!。在动作后面加一个"!"。

打开

  打开文件,指的是把硬盘上的文件的文本读入到内存里,生成一个缓冲区,这个缓冲区的名字和文件名一致。

  打开的方式:

  • 如果还没有打开vim。可以通过"vim file1 file2 ..."直接打开
  • 如果已经打开vim,想在vim里直接打开文件,可以使用:edit来完成。
  • 如果已经打开vim,不知道具体的文件路径,还可以通过:find来完成。

  这里有需要注意的点是:打开文件的路径。

  允许通过文件的绝对路径或相对路径来打开文件。绝对路径好理解,就不赘述了。下面主要说一下相对路径。

  在打开文件,需要输入文件相对路径时结合自动补全命令(Tab和<C-d>)很爽。

相对于当前工作目录

  查看当前工作目录:pwd

  切换当前工作目录:cd

  注意事项

  • cd的时候有一个特殊符号:"-",表示上一次的目录 。使用:cd - 就可以切回上一个目录。

相对于活动文件目录

  有的时候,我们在编辑一个文件A。这个文件A并不在当前的工作目录下。此时,我们又想编辑另一个文件B,这个文件B和文件A在同一个目录。

  一种做法是输入从工作目录开始的路径,直到抵达该文件,然而这似乎有点儿舍近求远。想打开的文件和活动缓冲区中的文件在同一个目录里,如果能用活动缓冲区作参考点岂不是更理想吗

  % 符号代表活动缓冲区的完整文件路径。%:h去除文件名,但保留路径中的其他部分(这里当前于目录的路径)。

:e %:h<Tab>Ma<Tab>

#输入%:h<Tab>会被展开为当前文件所在目录的路径 

通过查找打开文件

  :find 命令允许我们通过文件名打开一个文件,但无需输入该文件的完整路径。

  只要给出了一个文件的完整文件路径,我们始终可以用:edit 命令打开此文件。然而,如果我们工作的工程中包含了多级嵌套目录呢?每次打开文件都得输入完整路径,这着实令人生厌。这就是为什么要引入:find 命令的原因。要想利用此功能,我们首先要配置‘path’ 选项。

  要想利用此功能,我们首先要配置‘path’ 选项。:set path+={path}

  {path}支持通配。

:set path+=./**

# ** 通配符会匹配当前目录下的所有子目录
# * 和 ** 在‘path‘ 设置中的处理与前文略有不同
# 更多详情查看:h file-searching

  输入文件名后,然后按一下<Tab> 键,Vim 就会在命令行上展开第一个匹配文件的完整文件路径;再按一次<Tab> 键,又会换成下一个匹配文件的完整文件路径

列表

  显示缓冲区列表。语法: :files|:buffers|:ls ,这三个都可以。不过我一般比较懒,喜欢少打几个字,一般使用:ls

  

  请注意状态区,就是截图的部分。这里面有4个位置:第一位(u),第二位(#,%),第三位(h,a),第四位(+)。

  1. 第一位:这个一般是没有的。如果有的话是u,表示用于显示帮助文档。 一般可以设置没有这个状态,通过:setlocal nobuflisted设置就可以
  2. 第二位:%表示的是当前活动(窗口显示)的缓冲区,#表示的是上一个活动的缓冲区。
  3. 第三位:缓冲区的状态。上面说过了。a表示激活状态,h表示隐藏状态
  4. 第四位:表示当前文件的状态
    1. - :不允许修改
    2. =:只读
    3. +:已经被修改过
    4. x :载入的时候错误

切换

  窗口只显示一个缓冲区,那如何在不同的缓冲区切换呢?

  在cmd-line模式下的切换语法

命令 用途
:bn 切换到下一个缓冲区
:bp 切换到上一个缓冲区
:b{buffername} 切换名为{buffername}的缓冲区
:b{n} 切换到编写为n的缓冲区
:bfirst 切换到第一个缓冲区
:blast 切换到最后一个缓冲区
:b# 切换到上一个显示的缓冲区

  可以通过映射更快捷的来切换。

  

保存

  把缓冲区的文本写入文件中。需要注意的是,只要没保存之前,所有的操作就是在缓冲区操作的。对原始的文件根本没有任何影响。

  这个语法在cmd-line模式的动作里已经说过了。就不在这里说了。对应的是:w。

删除

  

删除一个缓冲区并不会影响缓冲区所关联的文件,而只是简单地把该文件
在内存中的映像删掉

  语法:bd {buffername}

退出

  其实退出的是窗口

  语法:q

窗口

分隔

  有很多种分隔方式,每种略微不一样

通过vim分隔

  在还没打开文件之前,想就分隔,可以使用。

  语法:vim -(o|O) file1 file2 ...

  • o(小写o)代表的是横向分屏
  • O(大写o)代表的是竖向分屏。

通过快捷键

  如果想对当前窗口分屏,可以直接使用快捷键。

  • <C-w>s |<C-w><C-s>  表示的是横向分屏
  • <C-w>v |<C-w><C-v>  表示的是竖向分屏

通过ex命令

  如果在当前窗口,想对其他文件分屏,可以使用ex命令

  • :vs file   表示的是竖向分屏
  • :sp file   表示的是横向分屏

  注意事项

  • 如果不跟 file ,则相当于对当前文件分屏

设置大小

  一般是在分屏的情况下,有些屏想当作主屏,可以把这个窗口设置显示大些。

操作 用途
z{height} 设置窗口大小。一般比较喜欢这个用法,操作起来快。
<C-w>- 减少窗口大小
<C-w>+ 增加窗口大小
<C-w>= 所有窗口等宽、等高
<C-w>_ 最大化活动窗口的宽度
<C-w>| 最大化活动窗口的高度

  更多详细可以参见 :h window-resize

移动

  移动指的是移动光标位置

操作 用途
<C-w>h 光标移动到左边的窗口
<C-w>j 光标移动到下面的窗口
<C-w>k 光标移动到上面的窗口
<C-w>l 光标移动到右边的窗口
<C-w>t 光标移动到最顶端的窗口
<C-w>b 光标移动到最底端的窗口
<C-w>w|<C-w><C-w> 光标在窗口中循环移动

布局

  想移动窗口在标签页中显示的位置

操作 用途
<C-w><S-h> 把当前窗口移动到最左侧
<C-w><S-j> 把当前窗口移动到最下面
<C-w><S-k> 把当前窗口移动到最上面
<C-w><S-l> 把当前窗口移动到最右侧

关闭

  关闭窗口,窗口显示的缓冲区还在内存中。关闭窗口有这几类

  • 关闭当前窗口 。语法: :q|:clo[se]
  • 关闭其他窗口(除了当前窗口的当前标签页的其他窗口)。语法: :on[ly]
  • 关闭当前标签页所有窗口。语法 :qall

标签页

  用 Vim 的标签页可以把工作分隔到不同的工作区。Vim 中的标签页更像是Linux 中的虚拟桌面,而不是像其他文本编辑器中的标签页。

  在 Vim 中,标签页是可以容纳一系列窗口的容器(参见:h tabpage )

  Vim 的标签页与缓冲区并非一一对应的关系,相反,应该把标签页想成容纳一系列窗口的容器



  


打开

  用:tabedit {filename} 命令可以打开一个新的标签页, 如果省略了{filename} 参数的话,那么 Vim 会创建一个新标签页,里面包含一个空缓冲区。

  还有一种做法,如果当前标签页中包含了不止一个窗口,我们可以用<C-w>T 命令把当前窗口移到一个新标签页中(参见:h CTRL-W_T )。

  在任何命令打开一个窗口的Ex命令前端加一个":tab",则会打开一个新的标签。特别是在使用帮助文档时特别好用。比如: tab h gt

切换

  切换当前活动的标签页

Ex命令 普通模式命令 用途
:tabn {N} {N}gt 切换到编号为{N}的标签页
:tabn gt 切换到下一个标签页
:tabp gT 切换到上一个标签页

重排

  重新排序标签页。

  用:tabmove [N] 命令可以重新排列标签页。当[N] 为0 时,当前标签页会被移到开头;如果省略了[N],当前标签页会被移到结尾。如果你的终端支持鼠标,或是你正在使用GVim,那么你也可以通过鼠标拖曳来进行重排操作。

关闭

  关闭标签,只是关闭标签页下面显示的窗口。关闭标签页有这几类

  • 关闭当前标签页 。语法: :tabc[lose]
  • 关闭其他标签页(除了当前标签页的当前标签页的其他标签页)。语法: :tabon[ly]

 

时间: 2024-11-10 14:16:57

菜鸟vimer成长记——第3章、文件的相关文章

菜鸟vimer成长记——第0章、我眼中的vim学习

这是一系统总结vim的学习文章,记录我自己学习vim的过程和感悟.与此同时也想分享出来给大家,欢迎大家互相讨论和学习. 在这里假设你们对vim已经有了一些基本的认识或者说已经使用过几个月的vim.该系列文章里有些基础概念可能不会涉及到或者不会多做解释.一个是因为有些基础概念我目前也解释不清楚.越基础的解释起来越需要能力,目前鄙人还不具备.另一个是因为我相信各位大神们,你们已经有很好的搜索功能.当然有问题也欢迎大家互相讨论和学习. 这篇主要讲的是我当前对vim学习的理解.后面的一系列文章会针对于学

菜鸟vimer成长记——第2.0章、模式初探

首先,其他的文本编辑器只有一种模式,就是插入模式.而vim一下子颠覆了我们的世界观——有好多模式.这个是思维上的切换,很难也很重要!!! 其次,Vim 提供一个区分模式的用户界面.也就是说在不同的模式下相同的键位可能产生的结果不一样.好多快捷怎么记忆?记忆后过段时间不使用又还给vim了.这个是因为没有弄清楚职责和使用场景,没有构建成套的vim知识体系.而我们这里通过模式为载体来构建vim知识体系. 目的 介绍vim的常用模式职责及模式切换,减少由于不断思考和纠正什么场景用什么模式的什么操作而引起

菜鸟vimer成长记——第1.0章、统一概念

不管学什么技术,我都深信概念是最重要的.是影响整个学习轨迹,决定能在这个技术领域高度. 当然如果你现在的目的不是在学习而在于解决问题(很多人不愿意承认,或者没发现),那概念就暂时没那么重要了. 目的 弄清楚这些概念,有助于记忆,举一反三.重复的东西只学一次!! 用键盘不用鼠标 第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法. 具体有两个要注意的建议: 学会盲打 如果你要低头看着键盘打字,或者键位不熟悉,或者指法不舒服,那学习Vi

菜鸟vimer成长记——第2.4章、cmd-line模式

cmd-line模式又有3个类型:Ex 命令(ex commands).查找模式(Search patterns).Filter 命令(Filter commands).本文主要重点的是Ex 命令和Search patterns.Filter 命令暂时用的场景比较少,如果有更适合的场景再补充. 目的 掌握cmd-line模式下常用操作的语法和概念 Ex 命令简介 初时,先有ed,ed为ex之父,ex为vi之父,而vi为vim之父.可见Ex 命令的重要性. 在Ex 命令影响范围广且距离远.对比no

菜鸟vimer成长记——第2.1章、normal模式

目的 掌握normal模式下常用操作的语法和概念,这些操作对应的应用场景以及实用技巧. 通过normal模式举一反三掌握cmd-line和visual的常用文本操作. 简介 文本操作的理想状态为:一个操作符+一个动作命令. normal.visual.cmd-line都具有操作文本的基本功能. normal 操作符+动作命令. visual  动作命令+操作符. cmd-line   匹配范围+操作符. 这三个在文本的基础操作时实现的功能是一样的.主要围绕着normal来讲,其他的举一反三即可.

菜鸟vimer成长记——第2.3章、insert模式

大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些. 如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成. 目的 掌握inser模式下常用操作的语法和概念 光标移动 移动光标的位置,这些操作和其他的编辑器基本一致.列几个常用的,其他的不一一列举. 常用语法: 操作 用途 Ctrl+Left 向后移动一个单词 Ctrl+Right 向前移动一个单词 Home 移动到行首 End 移动到行尾 Ctrl+Home 移动到文件第一行 Ctrl+End 移动

菜鸟成长记1,软件工程大一经历

菜鸟成长记1 -----大一总结及反思 大一即将结束,突然间想总结一下我的大一生活,最重要的还是好好反思一下. 回首整个大一感觉自己学了好多的东西,但最终的感觉还是一无所成,大一上学期学习c语言,一直处于一个总是一个没有入门的感觉,虽然简单的c经长期磨练已经差不多搞懂,不过稍微复杂点的抑或着说稍微麻烦点的都没有真正学会,仅仅是学过c而已,在学c的同时一直想练ACM可能真的是天赋不够也可能是自己不是这块料,在几经折磨下,做了uva上不超过30道题的情况下放弃了,除想练ACM这中间还接触了java和

蓝的成长记——追逐DBA(17):是分享,还是消费,在后IOE时代学会成长

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46456389 [简介] 个人在oracle路上的成长记录,其中以蓝自喻,分享成长中的情感.眼界与技术的变化与成长.敏感信息均以其它形式去掉,不会泄露任何企业机密,纯为技术分享. 创作灵感源于对自己的自省和记录.若能对刚刚起步的库友起到些许的帮助或共鸣,欣慰不已. 欢迎拍砖

蓝的成长记——追逐DBA(1):奔波于路上,挺进山东

Oracle菜鸟的成长经历 ***************************************声明*************************************** 个人在oracle路上的成长日记,其中以蓝自喻,分享成长中的情感.眼界与技术的变化与成长.敏感信息均以英文形式代替,不会泄露任何企业机密,纯为技术分享. 创作灵感源于对自己的自省和记录.若能对刚刚起步的库友起到些许的帮助或共鸣,欣慰不已. 欢迎拍砖,如有关技术细节表述有错误之处,请您留言或邮件([email