厚书读薄丨《Vim实用技巧》第二部分 文件

第二部分 文件


第六章 管理多个文件

缓冲区 —— vim引入的增强功能

  1. 缓冲区是文件在内存中的映像,大多数Vim命令编辑的是缓冲区,也有一些命令针对文件进行操作,如:write:update:saveas

  2. 常用命令:

命令 作用
:ls 列出所有缓冲区的列表(可以同时打开多个缓冲区,如vim *.txt
:bn[ext] 切换到列表中的下一个缓冲区
:bp[rev] 切换到列表中的上一个缓冲区
:bf[irst] 跳到列表的开头
:bl[ast] 跳到列表的结尾
:buffer N 可以凭编号跳转到指定缓冲区
:buffer {bufname} 根据足以识别一个缓冲区的文件名字符段进行跳转,可以使用Tab进行自动补全
:bufdo 允许我们在所有 缓冲区上执行Ex命令,实际中更多使用:argdo,见参数列表
:bdelete N1 N2/ :N,M bdelete 删除缓冲区
:w[rite] 把缓冲区内容写入磁盘
:e[dit] 把磁盘文件内容读入缓冲区(即回滚所做修改)
:qa[ll] 关闭所有窗口,摒弃修改而无需警告
:wa[ll] 把所有改变的缓冲区写入磁盘

【注】为方便遍历,可以使用下列映射 (unimpaired.vim插件)

nnoremap <silent> [b :bprevious<CR>

nnoremap <silent> ]b :bnext<CR>

nnoremap <silent> [B :bfirst<CR>

nnoremap <silent> ]B :blast<CR>

  1. 缓冲区列表
1 %a + 	"1.txt"						第 1 行
2 #h + 	"2.txt"  					第 2 行
3 		"3.txt"						第 0 行
  • 开头的数字是Vim自动为缓冲区分配的编号
  • %表示当前窗口中的缓冲区
  • #代表轮换文件,按<C-^>可以在当前文件和轮换文件间快速切换
  • a 表示活动缓冲区(active)
  • h 表示隐藏缓冲区(hidden),例如做出修改但没保存,直接:bnext!跳转,原缓冲区就会隐藏
    • ⭐️ 当:q时,如果有未处理的隐藏缓冲区 ,Vim会将它加载入窗口中,此时可以使用:write保存到文件,或者使用:edit!重新从磁盘读取文件覆盖修改

参数列表 —— vi的功能

  1. 参数列表
[1.txt] 2.txt 3.txt
  • [] 指明当前活动文件

  • :args 打开参数列表

  • :next 切换到下一缓冲区

  • :prev切换到上一缓冲区

  • :first 跳转到第一个缓冲区

  • :last 跳转到最后一个缓冲区

  1. :args {arglist} 清空并重新设置参数列表的内容(实测是添加???)

    • 可以在任意时刻改变参数列表的内容!

    • {arglist}可以包括文件名、通配符,甚至是一条shell命令的输出结果

      ① 用文件名指定文件,如 :args index.html app.js

      ② 用Glob模式指定文件

      • *通配符:匹配0个或多个字符,仅限指定目录内

      • **通配符:匹配0个或多个字符,可以进入指定目录的子目录

      • * + ** + 部分文件名或目录名构造出来的就是Glob模式

        例如 :args **/*.*可以匹配当前目录和所有子目录中有后缀名的文件,包括c.jsb/c.jsa/b/c.txt

      • 可以使用多个Glob模式,如 :args **/*.js **/*.css

      ③ 用反引号结构指定文件

      • 反引号中的命令会被执行,例如 :args `ls` 会把当前目录下的所有文件加载入缓冲区
  2. :argdo{cmd}命令可以在参数列表中的每个文件上执行一条Ex命令

    • :argdo {cmd} 实际工作流程是:first - :{cmd} - :next - :{cmd}
    • ⭐️ 为了修改能够顺利进行,需要打开hidden选项,不然会警告没有保存
    • 修改结束后,可以使用:wall或者:argdo write进行保存

窗口 —— 缓冲区的显示区域

  1. 可以打开多个窗口,这些窗口可以显示同一个缓冲区(例如一个长文件的不同部分),也可以显示不同的缓冲区
  2. 划分窗口
命令 用途
<C-w>s 水平切分(新窗口在上面,仍显示当前缓冲区)
<C-w>v 垂直切分(新窗口在左边,仍显示当前缓冲区)
:sp[lit] {file} 水平切分,新窗口载入file
:vsp[lit] {file} 垂直切分,新窗口载入file

【注】:可以使用:edit更改当前窗口载入的文件

  1. 在窗口间移动
命令 用途
<C-w>w 在窗口间循环切换,按住Ctrl,没按两个w就可以切换
<C-w>+h/j/k/l 左/下/上/右

【注】:设置mouse选项或者使用GVim时,可以使用鼠标来激活窗口

  1. 关闭窗口
Ex命令 普通模式命令 用途
:clo[se] <C-w>c 关闭活动窗口
:on[ly] <C-w>o 只保留活动窗口,关闭其他所有窗口
  1. 调整窗口大小及重新排列窗口
命令 用途
<C-w>= 使所有窗口等宽、等高
<C-w>_ 最大化活动窗口的高度
<C-w>| 最大化活动窗口的宽度
[N]<C-w>_ 把活动窗口的高度设为[N]行
[N]<C-w>| 把活动窗口的宽度设为[N]行
  • 调整窗口大小还是用鼠标方便一点
  • 重排窗口可以通过:h window-moving了解

标签页 —— 将窗口分组,往往对应着一个新的工作

  1. 标签页:可以容纳一系列窗口的容器(:h tabpage)

  2. 打开和关闭标签页

命令 用途
:tabe[dit] {filename} 打开一个新的标签页,省略filename会创建一个新标签页,其中包含一个空缓冲区
<C-w>T 把当前窗口移动到一个新标签页
:tabc[lose] 关闭当前标签页
:tabo[nly] 关闭除当前标签页外的所有其他标签页
  1. 在标签页间切换
Ex命令 普通模式命令 用途
:tabn[next] {N} {N}gt 切换到编号为{N}的标签页
:tabn[next] gt 切换到下一个标签页
:tabp[revious] gT 切换到上一标签页
  1. 重排标签页
Ex命令 用途
:tabm[ove] [N] 把当前标签页移动到第N位,索引从0开始
:tabm[ove] 把当前标签页移动到末尾
  1. 设置工作目录
命令 用途
:lcd {path} 设置当前窗口的本地工作目录
:windo lcd {path} 设置当前标签页中所有窗口的本地工作目录

第七章 打开及保存文件

  1. :pwd 打印工作目录

  2. :edit {file}

    • 可以接受相对于工作目录的文件路径

    • :edit %:h<Tab> %代表活动缓冲区的完整文件路径,:h会去除文件名,只保留路径

      • 建议将%:h映射为%%

        cnoremap <expr> %% getcmd-type() == ':'? expand('%:h').'/':'%%'

  3. :find

    • 通过文件名打开一个文件,而不需要输入完整路径
    • 需要配置‘path’选项,将根据path指定的目录进行查找
      • :set path+=app/**将app/目录下的所有子目录加入path
  4. netrw —— vim发行版标配插件,为Vim原生的文件管理器

    • 必须确保Vim被配置成可加载插件

      // .vimrc
      essential.vim
      set nocompatible
      filetype plugin on
      
    • 用vim打开一个目录:

      $ vim {drectory}

      :edit {directory}

      :E[xplore] = :edit %:h 打开活动缓冲区所在的目录

      :S[explore] 在一个水平切分窗口里打开文件管理器

      :Ve[xplore] 在一个垂直切分窗口里打开文件管理器

    • 显示形式:

    在这里插入图片描述

    • 在目录处按<CR>会进入该级目录

    • 在文件处按<CR>则会进入该文件的缓冲区,此时按<C-^>可以切换回目录

    • - 可以快捷返回上级目录

    • 工程目录树始终居于一个窗口的方式不适合Vim,更适合Vim的工作方式是:把每个窗口想象成纸牌,一面显示文件内容,一面显示文件管理器,除了第一次需要用:E打开外,之后都可以使用<C-^>进行切换

    • netrw还可以创建(:h netrw-%/nwtrw-d)、重命名(:h netrw-rename)、删除(:h netrw-del)新文件和目录,杀手锏是利用多种协议读写网络文件,如scp, ftp, curl及wget,参见:h newtrw-ref

  5. 怎么把文件保存到不存在的目录?

    • :edit {file} 创建空缓冲区
    • !mkdir -p %:h 创建中间目录
    • :write 写入
  6. 以超级用户权限保存文件

    :w !sudo tee %>/dev/null

    % 会被展开为当前文件的完整路径

  7. <C-g> 查看文件状态

猜你喜欢

转载自blog.csdn.net/weixin_43575658/article/details/113353490
今日推荐