V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
amiwrong123
V2EX  ›  程序员

vim 怎么在:后面复制东西

  •  
  •   amiwrong123 · 272 天前 · 2736 次点击
    这是一个创建于 272 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    source ./build/define.sh
    ...
    

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

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

    求各位大佬不吝赐教。

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

    手头没电脑,大意就是这样。双引号是匿名寄存器的名字,Ctrl+r 是命令模式粘贴。你也可以复制到其它寄存器。
    amiwrong123
        7
    amiwrong123  
    OP
       272 天前
    @SpiderXiantang
    我好像没用対。输入:vsp 后,光标就只能在冒号后面了呀,怎么做到 光标到 ./build/define.sh
    harttle
        8
    harttle  
       272 天前 via iPhone
    牛逼,原来 gf 直接就有,学习了。
    amiwrong123
        9
    amiwrong123  
    OP
       272 天前
    @SpiderXiantang
    好吧,原来是 光标移动到路径上,然后按 gf ,就可以直接跳转。不过就没法分屏看了。
    amiwrong123
        10
    amiwrong123  
    OP
       272 天前
    @SpiderXiantang
    好吧,我懂了,先分屏打开同一个文件,再 gf 。哈哈,谢谢。
    amiwrong123
        11
    amiwrong123  
    OP
       272 天前
    @harttle
    你这个我也试了,是好用的。用 y 的话,还可以更确切的控制 复制的内容。
    towry
        12
    towry  
       272 天前
    @amiwrong123 你先将光标移动到文件路径上面去啊,然后 :vsp <C-R><C-F>。
    运行 `:h <C-F>` 查看帮助。
    SpiderXiantang
        13
    SpiderXiantang  
       272 天前
    光标移动可以使用 f/F/t/T
    SpiderXiantang
        14
    SpiderXiantang  
       272 天前   ❤️ 1
    &t=399s&ab_channel=ThePrimeagen
    coldle
        15
    coldle  
       272 天前
    主要就是通过<c-r>指令粘贴寄存器内容, 针对你标题的需求就是输入`<c-r>"`, 因为复制的内容在这个`"`寄存器里
    SpiderXiantang
        16
    SpiderXiantang  
       272 天前
    @SpiderXiantang :vsp<CR>fbgf
    jzdxeb
        17
    jzdxeb  
       271 天前 via iPhone
    v 选中 字符 y
    :vs crlt+r 0 回车
    amiwrong123
        18
    amiwrong123  
    OP
       271 天前
    @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
        19
    SpiderXiantang  
       271 天前   ❤️ 1
    > 此时我使用: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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3004 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:11 · PVG 16:11 · LAX 01:11 · JFK 04:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.