vim 怎么在:后面复制东西

284 天前
 amiwrong123

比如我用 vim 打开了一个文件,文件内容有:

source ./build/define.sh
...

然后我输入:vsp ./build/define.sh,就可以分屏打开这个文件,只是在这个过程中,我用到了鼠标。我是先鼠标双击了./build/define.sh部分,使得光标已经包住了这个部分,然后使用鼠标中键复制到:vsp 的后面。(当然,我也可以手敲一遍./build/define.sh

但是我觉得这样用鼠标有点不舒服,但是网上搜了一下,没搜到解决方法(感觉我搜的关键词可能不对)。我就是想全程用键盘解决这个复制粘贴的过程。

求各位大佬不吝赐教。

2764 次点击
所在节点    程序员
19 条回复
SpiderXiantang
284 天前
: vsp 然后光标 到 ./build/define.sh 上 gf 跳转到 ./build/define.sh
mabelrussell
284 天前
光标停留在 ./build/define.sh 任意单词上,然后在 :vsp 后面键入 ctrl+r ctrl+f
SpiderXiantang
284 天前
:gf
SpiderXiantang
284 天前
:h gf
amiwrong123
284 天前
@mabelrussell
谢谢,好用
harttle
284 天前
可以这样搜一下插件:go to file, go to selection 也可以手写个脚本。下面介绍对这个 case 怎么不用鼠标:
1. 复制文件名到寄存器:光标挪到.输入 y$
2. 粘贴到 command line 模式:输入:vsp 后,按 Ctrl+r ,再输入英文”(需要按着 shift ,抱歉我的 iOS 输入法只能发出来中文引号……)

手头没电脑,大意就是这样。双引号是匿名寄存器的名字,Ctrl+r 是命令模式粘贴。你也可以复制到其它寄存器。
amiwrong123
284 天前
@SpiderXiantang
我好像没用対。输入:vsp 后,光标就只能在冒号后面了呀,怎么做到 光标到 ./build/define.sh
harttle
284 天前
牛逼,原来 gf 直接就有,学习了。
amiwrong123
284 天前
@SpiderXiantang
好吧,原来是 光标移动到路径上,然后按 gf ,就可以直接跳转。不过就没法分屏看了。
amiwrong123
284 天前
@SpiderXiantang
好吧,我懂了,先分屏打开同一个文件,再 gf 。哈哈,谢谢。
amiwrong123
284 天前
@harttle
你这个我也试了,是好用的。用 y 的话,还可以更确切的控制 复制的内容。
towry
284 天前
@amiwrong123 你先将光标移动到文件路径上面去啊,然后 :vsp <C-R><C-F>。
运行 `:h <C-F>` 查看帮助。
SpiderXiantang
284 天前
光标移动可以使用 f/F/t/T
SpiderXiantang
284 天前
<amp-youtube data-videoid="5JGVtttuDQA" layout="responsive" width="480" height="270"></amp-youtube>&t=399s&ab_channel=ThePrimeagen
coldle
284 天前
主要就是通过<c-r>指令粘贴寄存器内容, 针对你标题的需求就是输入`<c-r>"`, 因为复制的内容在这个`"`寄存器里
SpiderXiantang
284 天前
@SpiderXiantang :vsp<CR>fbgf
jzdxeb
284 天前
v 选中 字符 y
:vs crlt+r 0 回车
amiwrong123
284 天前
@SpiderXiantang
还是帖子里的这个内容,我先用:vsp 分屏打开同一个文件,然后 gf 进入了./build/define.sh 的内容,但./build/define.sh 是一个只读文件,但是我又在 insert 模式下修改了一些东西,但这些修改我不想更新到文件里的。

此时我使用:bd 的话,就会提示 no write since last change for buffer 2(add ! to override)。老哥问下这个怎么解决啊

因为文件中其实有这样的内容:
source ./build/define1.sh
source ./build/define2.sh

目前就是想,先进入看 define1 的内容,再回到当前文件,再进入看 define2 的内容。只是在看 define1 的时候,我改了东西。

网上搜了一下,这些:b 命令是关于到缓冲区的,但是理解不是很深刻。
SpiderXiantang
284 天前
> 此时我使用:bd 的话,就会提示 no write since last change for buffer 2(add ! to override)。老哥问下这个怎么解决啊
:q!

> 目前就是想,先进入看 define1 的内容,再回到当前文件,再进入看 define2 的内容。只是在看 define1 的时候,我改了东西。

先 :set nohidden
光标到 define1 gf 然后 Ctrl O 回到上一个 buffer 再移动光标到 define2 再 gf

buffer 你就当成 缓存就行了,只不过有些隐藏了有些就是你正在看的。

可以先过一下 vimtutor

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960935

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX