代码之家  ›  专栏  ›  技术社区  ›  sumek

如何在Vim中复制整行?

  •  1962
  • sumek  · 技术社区  · 17 年前

    如何在中复制整行 编辑器 以类似的方式 Ctrl键 + D 在IntelliJ IDEA/Resharper或 Ctrl键 + 中高音的 + / 在……里面 日食 ?

    22 回复  |  直到 4 年前
        1
  •  3272
  •   Community Mohan Dere    3 年前

    y y Y 复制行(助记符: y 银行 )

    d d d 删除 行(Vim将您删除的内容复制到剪贴板中,如“register”,如 操作)

    然后

    p p 阿斯特 复制或删除的文本 之后 当前线路

    Shift+P p 阿斯特 复制或删除的文本 之前 当前线路

        2
  •  487
  •   Hjulle Boyd Stephen Smith Jr.    12 年前

    正常模式:见其他答案。

    这个 Ex 方式:

    • :t. 将复制该行,
    • :t 7 将在第7行之后复制它,
    • :,+t0 将复制文件开头的当前行和下一行( ,+ 是该范围的同义词 .,.+1 ),
    • :1,t$ 将从开始到光标位置复制行到结束( 1, 是该范围的同义词 1,. ).

    如果您需要移动而不是复制,请使用 :m 而不是 :t .

    如果你把它和 :g :v :

    • :v/foo/m$ 将把所有与模式foo不匹配的行移动到文件末尾。
    • :+,$g/^\s*class\s\+\i\+/t. 将复制表单的所有后续行 class xxx 就在光标之后。

    参考: :help range , :help :t , :help :g , :help :m :help :v

        3
  •  332
  •   Linulin    14 年前

    YP Yp yyp .

        4
  •  299
  •   Adam    12 年前

    copy and paste in vim

    没有比这更简单的了!从正常模式:

    yy
    

    然后移动到要粘贴的行,然后

    p
    
        5
  •  63
  •   Arslan Ali    11 年前

    y y

    将拖动当前行而不删除它

    d d

    将删除当前行

    p

    put 用前面的任何一种方法抓取的线

        6
  •  63
  •   Arslan Ali    11 年前

    执行以下操作:

    第一, y y 复制当前行,然后 p 粘贴。

        7
  •  54
  •   the Tin Man    6 年前

    如果你想换一种方式:

    "ayy : 这将把行存储在缓冲区中 a .

    "ap : 这将放置缓冲区的内容 在光标处。

    这方面有很多变化。

    "a5yy : 这将把5行存储在缓冲区中 .

    请参阅“ Vim help files 为了更多的乐趣。

        8
  •  50
  •   Mwiza Nagarjuna Durgam    8 年前

    y y p -记住“耶!”

    多行,中间有一个数字:

    y 7. y p

        9
  •  30
  •   Mwiza Nagarjuna Durgam    8 年前

    y y p -粘贴后

    y y P -粘贴前

        10
  •  17
  •   Xavier Guihot    8 年前

    我喜欢: 转移 + v (立即选择整行,如果需要,可以选择其他行),y,p

        11
  •  14
  •   Rook    16 年前

    另一种选择是:

    nmap <C-d> mzyyp`z
    

    为您提供了保留光标位置的优点。

        12
  •  12
  •   nikolavp nikolavp    17 年前

    您也可以尝试<C-x><C-l>这将重复插入模式中的最后一行,并为您带来一个包含所有行的完成窗口。其工作原理几乎与<C-p>

        13
  •  10
  •   Michael    10 年前

    对于不了解vi的人来说,上面的一些答案可能会用“粘贴…之后/之前”这样的短语误导他 当前行 ".
    它实际上是“粘贴…之后/之前” 光标 ".

    y y Y 复制行

    d d 删除该行

    然后

    p 粘贴复制或删除的文本 之后 这个 光标

    P 粘贴复制或删除的文本 之前 这个 光标


    有关更多密钥绑定,您可以访问此网站: vi Complete Key Binding List

        14
  •  9
  •   DarkWiiPlayer    8 年前

    我知道我迟到了,但不管怎样;我在.vimrc中有这个:

    nnoremap <C-d> :copy .<CR>
    vnoremap <C-d> :copy '><CR>
    

    这个 :copy 命令只是将所选行或范围(始终是整行)复制到作为其参数给出的行号下方。

    在正常模式下,它的作用是 copy . 将此行复制到此行正下方 .

    在视觉模式下,它变成 '<,'> copy '> 从选择开始到选择结束复制到选择结束下方的行 .

        15
  •  6
  •   Savrige    4 年前

    我更喜欢定义自定义关键帧映射 Ctrl键 + D 在……里面 .vimrc 在以下两个中复制当前行 正常的 模式和 插入 模式:

    " duplicate line in normal mode:
    nnoremap <C-D> Yp
    " duplicate line in insert mode:
    inoremap <C-D> <Esc> Ypi
    
        16
  •  5
  •   Mwiza Nagarjuna Durgam    8 年前

    默认值为 y y p ,但我已经使用这个重新绑定一年左右了,我很喜欢它:

    " set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv

        17
  •  3
  •   cori    17 年前

    1 gotcha:当你用“p”放线时,它会放线 之后 光标所在的行,所以如果你想在拖动的行之后添加行,在放置新行之前不要将光标向下移动。

        18
  •  3
  •   ap-osd    10 年前

    对于那些开始学习vi的人来说,这里有一个很好的vi介绍,并列列出了典型的Windows GUI编辑器光标移动和快捷键的vi命令。它列出了所有基本命令,包括 (复制行)和 p (粘贴后)或 P (粘贴前)。

    vi (Vim) for Windows Users

        19
  •  3
  •   PoolloverNathan Alfred    6 年前

    如果你想复制一行并将其粘贴到当前行下方,就像在Sublime中一样 Ctrl键 + 转移 + D ,然后您可以将此添加到您的 .vimrc 文件。

    nmap <S-C-d> <Esc>Yp

    或者,对于插入模式:

    imap <S-C-d> <Esc>Ypa

        20
  •  1
  •   yolenoyer    8 年前

    我喜欢使用这个映射:

    :nnoremap yp Yp
    

    因为它使其与本地语言一起使用时保持一致 YP 命令。

        21
  •  0
  •   frfernandezdev    5 年前

    我使用这种映射,它类似于vscode。我希望它有用!!!。

    nnoremap <A-d> :t. <CR>==
    inoremap <A-d> <Esc>:t. <CR>==gi
    vnoremap <A-d> :t$ <CR>gv=gv
    
        22
  •  0
  •   Pierre    3 年前

    如果你想复制下面的一行,上面的答案是正确的。

    另一种常见的情况是,如果你在文本中的某个地方,你想复制一行位于缓冲区中很远的地方,看不见,但出于某种原因,你不想去那里。

    在这种情况下:

    • 开始键入要复制的行首的几个字母;
    • Ctrl-X Ctrl-L :这将显示一个类似于自动补全的弹出列表( Ctrl-P and Ctrl-N );
    • 使用以下命令上下浏览此列表 Ctrl-L Ctrl-N 直到你得到你想要的线;
    • Enter 瞧。

    我发现这在编写代码时特别方便。