Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师
立即订阅
2082 人已学习
课程目录
已更新 7 讲 / 共 24 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词|我们为什么要学 Vim?
免费
导读|池建强:Vim 就是四个字“唯快不破”
基础篇 (5讲)
01|各平台下的 Vim 安装方法:上路前准备好你的宝马
02|基本概念和基础命令:应对简单的编辑任务
03|更多常用命令:应对稍复杂的编辑任务
04|初步定制:让你的 Vim 更顺手
05|多文件打开与缓冲区:复制粘贴的正确姿势
Vim 实用技巧必知必会
15
15
1.0x
00:00/00:00
登录|注册

05|多文件打开与缓冲区:复制粘贴的正确姿势

吴咏炜 2020-08-03
你好,我是吴咏炜。
在前面的几讲里,我们介绍了 Vim 的基本命令和配置。有了这些基本功,单个文件的基本编辑对你来说应该已经不成问题了。不过,显然我们在工作和生活中不可能只用一个文件包打天下,你肯定还会遇到需要同时编辑多个文件的情况。今天,我们就来细细讨论一下这个话题,什么是编辑多个文件的正确姿势。
先来假设一个简单的使用场景,我们现在需要在某个目录下的所有 .cpp 和 .h 文件开头贴入一段版权声明,该如何操作?

单文件的打开方式

图形界面

使用图形界面的话,我们可以在操作系统的资源管理器里进入到合适的目录,然后逐个使用 Vim 来打开文件。我们可以使用右键菜单(“Edit with Vim”、“Open with…”等),也可以直接把文件拖拽到 Vim 里。使用“文件 > 打开”(File > Open)菜单当然也是一种选择,但这需要你记住上次打开到第几个文件,并不如使用资源管理器方便。
使用这几种编辑方式的话,你可以把需要粘贴的内容放到操作系统的剪贴板里,然后在图形界面的 Vim 里用以下方法之一粘贴进去(当然,如果光标不在开头的话,先用鼠标或用 gg 命令跳转到开头):
正常模式 Vim 命令 "+P(意义我们后面再解释)
快捷键 <D-V>(提醒:这是我们对 ⌘V 的标记方式;仅适用于 macOS)或 <S-Insert>(PC 键盘)
鼠标右键加“粘贴”(Paste)
菜单“编辑 > 粘贴”(Edit > Paste)
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Vim 实用技巧必知必会》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(7)

  • 我来也
    关于文中`启用括号粘贴模式`的内容,我稍微补充一下下.

    针对在tmux中使用vim的同学,可能需要稍微调整下.
    具体参见这篇文章:
    [Automatically set paste mode in Vim when pasting in insert mode](https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode)

    在我使用了一段时间该功能后,默默的把这个功能给关闭了.
    还是用了最原始的方法,映射了F12在paste模式开启和关闭见切换.
    原因是:有一定几率在粘贴后,把终端环境弄出问题.导致无法正常使用终端和退出vi.
    反正我遇到的概率还是蛮大.我的环境是MacOS+iTerm2+Vim(8.2).

    后来我发现,我在外面复制的内容,直接在vim中的普通模式中按`p`,一样不会触发vim的自动缩进.
    由于我mac下的vim是与系统剪切板打通了的,所以还是蛮方便的.
    2020-08-03
  • 我来也
    关于文中批量在文件开头贴入内容的需求,应该还可以更简单点.
    1. 打开需要修改的文件: `vi *.cpp *.h`
    2. 在外面复制一段内容(或在vim中选中一段内容并用y命令复制到默认寄存器)
    3. 在命令行模式中执行命令: `bufdo normal ggP` (批量在所有缓冲区中的文件上执行命令)
    4. 回写所有文件: `:wa`.
    至此,任务就完成了.

    `bufdo`就是在缓冲区列表的每一个缓冲区里执行命令{cmd}.
    与之对应的有`argdo`.
    bufdo是针对缓冲区的.
    argdo是针对参数列表的.
    两者还是有明显的差别的.
    查看所有列表时,一个是`buffers`,一个是`args`.
    如果想在打开vi的情况下,正则导入文件,就不能用`vi *.h`,但是可以用`args *.h`.
    2020-08-03
  • ChamPly
    请问一下老师,您平时使用终端、gui哪个多一点呢?
    2020-08-03
  • Geek_bob
    老师好,请问如何在 _vimrc中配置vim中光标的颜色。是set cursor吗 ?在帮助文档中没有找到。
    2020-08-03
  • Geek_1ba5d9
    您好,我想请问下,我在windows环境下,git bash里输入vim和cmd里输入vim,打开的是不同的vim。可以怎么设置成同一个吗
    2020-08-03
  • Kevin⚡️Zhou
    "如果某个 Vim 会话里不同的窗口或标签页(下一讲里会讨论)编辑的是同一个文件,它们对应到的也会是同一个缓冲区"
    老师, 这里的vim回话是指一个vim进程中是么?

    作者回复: 是。

    2020-08-03
  • 唐龙
    从别的地方粘贴代码,然后vim自动为我添加缩进的情况我遇到过,当时找到一行删四个空格,后面的用数字加点来完成,感觉~挺傻的。

    作者回复: 今后会遇到这种问题的人会越来越少了……

    2020-08-03
收起评论
7
返回
顶部