05|多文件打开与缓冲区:复制粘贴的正确姿势
该思维导图由 AI 生成,仅供参考
单文件的打开方式
图形界面
- 深入了解
- 翻译
- 解释
- 总结
Vim多文件打开与缓冲区管理是一篇深入介绍Vim编辑多个文件的实用技术文章。文章首先介绍了在Vim中打开多个文件的方法,包括使用通配符和命令行参数。作者还讨论了在终端Vim中处理多文件打开的特殊情况,并介绍了Vim 8.0.0210版本引入的对括号粘贴模式的支持。此外,文章详细讨论了缓冲区的概念和管理方法,包括使用命令行模式的命令进行缓冲区切换和管理。总的来说,本文通过介绍Vim编辑多个文件的方法和缓冲区管理,为Vim用户提供了实用的编辑技巧和高效的工作流程。
《Vim 实用技巧必知必会》,新⼈⾸单¥59
全部留言(20)
- 最新
- 精选
- 我来也关于文中批量在文件开头贴入内容的需求,应该还可以更简单点. 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`.
作者回复: bufdo 是个很有用的命令。不过,你这么做还是有一定先决条件的: 1. 外面复制不能直接用,你需要使用 gg"+P,而且这个不能适用于远程和纯终端版本。 2. 你需要打开 hidden 才能这么用。这又是个额外复杂性,而且有一定的坑。 此外,虽说这儿是批量修改,还是人眼要看一下的那种。如果真的完全不用看,用 sed 就好。
2020-08-0357 - 我来也关于文中`启用括号粘贴模式`的内容,我稍微补充一下下. 针对在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是与系统剪切板打通了的,所以还是蛮方便的.
作者回复: 哈哈,tmux 又把问题进一步复杂化了…… 注意我说的括号粘贴模式的主要使用场景是远程连接到服务器上,这种情况下,没有打通剪贴板这个选项……
2020-08-0332 - fei命令 :n|normal ggP,其中的"|"的用法没明白,Shell中是管道,用在这里是什么含义?是表示两个命令依次执行?这种用法的说明文档怎么查阅?
作者回复: 在 Vim 里,竖线是用来分隔多个命令的。用“:help :|”可以查看帮助文件。“:”代表命令模式的命令。 这些在“:help”的一开头就有说明的,我在文中没有重复这些信息。
2021-10-281 - IT蜗壳-Tango这种专栏干货太多了,需要吸收一下,但是很有意思啊。加油
作者回复: 多多练习就行……
2020-11-061 - 三石现有a.py b.py c.py d.py四个文件 vim *.py 进入了a.py 需求从a.py 跳转到 c.py 方式1 如果用命令行模式多次 n才能到达c.py 这样很啰嗦 方式2 如果用命令行 c c.py的话 查看参数列表 参数列表显示当前还处于还在a.py上,不一致问题。 方式3 如果用 args c.py 虽然到达了,但修改了args参数列表。 此时命令行查看 args就只有c.py一个文件了。 想问下有没有好的方法跳转?
作者回复: 如果不介意参数列表的显示的话,用这一讲介绍的 3<C-^> 最快。 介意的话,用 :3argu 吧。或者记得住要跳几步的话,用 :2n。
2020-08-111 - xavier感谢老师的倾囊相授。之前只会基本的一些操作,已经感觉到 vim 的高效。跟着老师学习,效率可以再提高 N 倍。期待后续课程。
作者回复: 谢谢。😇
2020-08-051 - pyhhou根据当前的 vim 配置,如果在正常模式下。鼠标选择会造成 vim 进入 virtual 模式而不能用 <D-C> 进行复制,必须输入 : 进入到命令行模式下才可以复制。这样的操作放到 Mac 下是可以的,但是通过 Mac 的 terminal 去到远程 Ubuntu 命令行 server,发现如果进入到命令行模式就没有办法通过鼠标选中文字,也就不能复制,不知道有没有什么好的方法。 现在的场景是,去到两个远程机器,把一个机器上的文件的某部分文字复制到另一个机器上一个文件上。不知道除了手动照着敲还有没有什么更好的办法?
作者回复: Visual,不是 virtual。 我回头试试你说的。Mac 终端至少可以用 <D-R> 暂停发送鼠标事件(再按一次恢复)。
2020-08-0561 - 谁家内存泄露了请问各位是如何使用vim打开工程项目的? 我们的项目需要多个git仓库大概是这样的树形结构 root | |——git1 |-inc | |-src | |——git2 |-inc | |-src | |——git3 |-inc | |-src ... 是一次性把所有的cpp和h导入吗?还是有其他好方法?
作者回复: Vim 没有“导入”的概念啊。如果想要跳转之类的功能的话,需要看你的工程怎么设置。参见后面讨论 YouCompleteMe 等工具的部分。
2022-09-19归属地:上海 - tequ1lAneiovim在同时打开多文件的时候,切换文件和切换缓冲区是一回事吗?他们操作的对象是什么呢?
作者回复: 切换文件和切换缓冲区可以获得相近的效果,但它们不是一回事,用的命令也不一样。实际上专栏里已经写了,打开多文件时每个文件都有对应的缓冲区,但你完全可以建立新的缓冲区(打开新文件等),而不影响要打开的文件列表(:args)。:ls 的结果数量常常要多于 :args。
2021-08-11 - chris老师请问:args命令是干什么的,没搞懂!
作者回复: 我们主要用它来替换命令行给出的参数列表,即,执行 :args *.c 相当于你用 vim *.c 来启动 Vim。这样,我们就能使用 :next 等命令在多个文件中跳转。
2020-09-16