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

如何将拖动的文本粘贴到Vim命令行中?

  •  558
  • dan  · 技术社区  · 14 年前

    9 回复  |  直到 5 年前
        1
  •  1135
  •   idophir    9 年前

    对。击中 - " . 如果在所拖动的内容中有文字控制字符,请使用 Ctrl键 - , Ctrl键 - O型 " .

    寄存器基本上是字符串的存储位置。Vim有许多以不同方式工作的寄存器:

    • 0 y 在正常模式下,不指定寄存器,RANKED text将进入该寄存器,也将进入默认寄存器),
    • 1 9 c d 等。 ),
    • " " Ctrl键 , ),
    • a z 自用(大写 A Z
    • _ (表现得像 /dev/null (Unix)或 NUL
    • - (小删除寄存器),
    • / (搜索模式寄存器,在使用 / ? , * # 例如,您还可以对其进行写入以动态更改搜索模式),
    • : (通过 Q : ,只读),
    • + *

    :help registers 供参考。

    :registers 显示所有寄存器的内容。这个命令的同义词和缩写是 :display , :reg :di .

    在插入或命令行模式下, - 加上寄存器名,插入此寄存器的内容。如果要逐字插入(不自动缩进,不转换控制字符,如 0x08 Ctrl键 - , Ctrl键 - O型 ,注册名。 :help i_CTRL-R 以下段落供参考。

    • 在正常模式下,点击 : 第页 . vim中使用的最后一个命令被粘贴到缓冲区中。
      让我们分解: " 是一个普通模式命令,允许您选择在下一次拉伸、删除或粘贴操作中要使用的寄存器。所以 : 选择冒号寄存器(存储最后一个命令)。那么 是一个你已经知道的命令,它粘贴寄存器的内容。

      囊性纤维变性。 :help " :help quote_:

    • 您正在编辑一个VimL文件(例如 .vimrc )现在要执行几个连续的行: 是的 j型 : " .
      在这里, 是的 将当前行和下一行(这是因为j是一个逐行运动,但这超出了这个答案的范围)拉入默认寄存器(也称为未命名寄存器)。然后 :@ " 是如何引用未命名的寄存器的。也可以看到这个答案的顶部,这是相关的。

      不要混淆 " " 从上一个例子,这是一个正常的模式命令。

      囊性纤维变性。 :help :@ :help quote_quote

    • 在“插入”模式下,或在命令行中,使用 - , / .

      :help quote_/ , help i_CTRL-R

      推论:保持你的搜索模式,但添加一个替代方案: / Ctrl键 , / \|alternative

    • 你在视觉模式下选择了两个单词,用 是的 :pu . 这是缩写 :put " .The :put

      囊性纤维变性。 :help :put

      :call setreg('"', @", 'V') 然后 p . 这个 setreg @x 哪里 x 是VimL中的寄存器名),并将其转换为第三个参数中指定的模式, V 对于线条,没有字符和文字 ^V 对于区块。

      囊性纤维变性。 :help setreg() getreg() getregtype() .

    • qa ... q ,然后 :echo @a 会告诉你你打了什么,然后 @a 将重放宏(可能您知道其中一个,非常有用,以避免重复的任务)

      囊性纤维变性。 :help q , help @

      前面例子的推论:如果 8go @+ 将剪贴板内容作为宏播放,从而转到文件的第8个字节。实际上,这几乎适用于所有寄存器。如果上次插入的字符串是 dd 在插入模式下,然后 @. 威尔(因为 . 寄存器包含最后插入的字符串)删除一行。(Vim文档在这方面是错误的,因为它声明 , % , : . 只能与 第页 P , :放置 Ctrl键 -

      囊性纤维变性。 :help @

      :@ @ (从寄存器中播放正常模式命令的正常模式命令)。

      值得注意的例外是 @: @: 将按您的期望执行,将寄存器解释为Ex命令,而不是尝试在正常模式下播放它。所以如果你最后的命令是 :e ,寄存器包含 e @:

      囊性纤维变性。 :help @:

    • 在运行之前,显示在正常模式下要执行的操作: @='dd' 进入 . 一旦你击中 = key,Vim切换到表达式求值:输入表达式并点击 进入 ,Vim计算它,结果充当寄存器内容。当然是登记册 =

      囊性纤维变性。 :help quote_=

      推论:如果您正在编辑一个命令,并且您意识到您应该将当前缓冲区中的某些行插入到命令行中:不要按 电子稳定控制系统 ! 使用 - =getline(58) . 之后,您将返回到命令行编辑,但它已插入第58行的内容。

    • :let @/ = 'foo'

      囊性纤维变性。 :help :let

      / 在模式中。当然,你需要把所有的单引号都翻一番。

    • 复制以开头的所有行 foo ,然后所有包含 bar qaq (重置 寄存器中存储一个空宏), :g/^foo/y A , :g/bar/y A , :let @+ = @a .

      使用资本寄存器名称使寄存器以追加模式工作

      尚未由重新映射 mswin.vim ,开始Ex模式 ,链接那些实际上更好地称为Ex命令的冒号命令,然后通过键入 visual .

      囊性纤维变性。 :help :g , :help :y , :help Q

    • :g/^/put _ 。这将放置黑洞寄存器的内容(读取时为空,但可写,行为类似于 )每行之后(因为每行都有一个开始!)。

    • 添加一行包含 在每行之前: :g/^/-put ='foo' . 这是表达式寄存器的巧妙使用。在这里, - .-1 (参见。 :help :range ). 自从 :放置 将文本放在行后,必须明确告诉它对前一行执行操作。

    • 将整个缓冲区复制到系统剪贴板: :%y+ .

      :帮助:范围 (对于 部分)和 :帮助:y

    • 如果宏录制错误,可以键入 :let @a=' - =replace(@a,"'","''",'g') 进入 ' 然后编辑它。这将修改存储在寄存器中的宏的内容 ,这里显示了如何使用表达式寄存器来执行此操作。

    • 如果是的话 dddd ,你可以 uu 第页 你可以得到最后一个被删除的行。但实际上,您还可以使用寄存器恢复多达9个删除 @1 通过 @9 .

      "1P ,然后 . "2P ,等等。

      囊性纤维变性。 :help . :help quote_number

    • 如果要以插入模式插入当前日期: - =strftime('%y%m%d') 进入

      囊性纤维变性。 :help strftime()

    • :@
    • @ 在正常模式下,将寄存器内容解释为正常模式击键的命令(使用 : register,它包含上一次播放的命令,不带初始冒号:在本例中,它将重播该命令,就像您还重新键入了冒号和最终返回键一样)。

    • " 在正常模式下的命令,可以帮助您选择一个寄存器,用于yank、paste、delete、correct等。

    • " 也是有效的寄存器名(默认或未命名的寄存器),因此可以作为期望寄存器名的命令的参数传递
        2
  •  48
  •   K.Dᴀᴠɪs    6 年前

    用于粘贴系统剪贴板 移位 - .

    它可以在Windows下工作,但我猜它在Linux下也能很好地工作。

        3
  •  38
  •   mtb deleteMe    8 年前

    “我想将拖动的文本粘贴到Vim命令行中。”

    虽然最高投票的答案非常完整,但我更喜欢编辑命令历史记录。

    q: . 这将为您提供一个最近使用的命令列表,可以使用普通vim命令进行编辑和搜索。您将从底部的空白命令行开始。

    对于文章所要求的确切内容,将一个拉伸的行(或拉伸的任何内容)粘贴到命令行中,拉伸您的文本,然后: q:p (进入命令历史编辑模式,然后(p)将被拖动的文本输出到新的命令行中。随意编辑, 执行。

    要退出命令历史模式,情况正好相反。在命令历史记录的正常模式下,键入: :q 进入

        4
  •  14
  •   deltree    8 年前

    要将系统剪贴板中的内容粘贴到vim命令行(“命令模式”),请使用 Ctrl键 + 然后 + 移位 + 惯性导航系统

    PS:不知道为什么 + 然后 * Ctrl键 + 然后 + + 版本和它似乎总是工作,至少在我的盒子上。

        5
  •  13
  •   naught101 Ari B. Friedman    12 年前

    "by 把它拉到 b @b .

        6
  •  1
  •   Conrad.Dean    10 年前

    我也有类似的问题。我希望选定的文本最终成为一个命令,但不依赖于粘贴它。下面是我试图为其编写映射的命令:

    :call VimuxRunCommand("python")
    

    此插件的文档仅显示使用字符串文本。如果尝试选择包含双引号的文本,则以下内容将中断:

    vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
    

    为了解决这个问题,只需使用 @ :

    vnoremap y:call VimuxRunCommand(@")<cr>
    

    传入未命名寄存器的内容,并使用双引号和多行edgecase。

        7
  •  1
  •   anonymous    7 年前

    OSX公司

    如果您在MAC OSX中使用vim,不幸的是,它带有旧版本的verion,并且不符合剪贴板选项。幸运的是,自制酒可以很容易地解决这个问题。

    安装vim:

    brew install vim --with-lua --with-override-system-vi

    brew install macvim --with-lua --with-override-system-vi

    重新启动终端以生效。


    将以下行附加到 ~/.vimrc
    set clipboard=unnamed

    现在你可以用 yy

        8
  •  1
  •   wmmso    6 年前

    这个问题已经很老了,但既然已经被看了这么多次,它似乎很受欢迎-我将把这个问题留给后人。对于上下文,这些信息来自于linux mint中的开箱即用、没有插件、没有.vimrc vim 7.4行为和默认选项。

    在命令行中键入CTL-r将提示输入寄存器名。所以输入:CTL-r*将把内容寄存器*放入命令行。它将粘贴任何寄存器,而不仅仅是“*”。请参阅:帮助c_CTRL-R。

    有关x11如何处理选择的说明,请参见:帮助->quote plus。即使在一个简单的、开箱即用的vim(同样,在linux mint的vim 7.4中,无论如何)中,用鼠标左键所做的任何选择都可以用鼠标中键粘贴到命令行中。

    请参见:帮助->x11 addl信息选择。

    tl;博士

    人们承认,这可能令人困惑。

        9
  •  0
  •   yang    6 年前
    1. "[a-z]y 将文本复制到[a-z]寄存器;

    2. 使用 :! 进入编辑命令;

    3. CTRL+R 按照注册标识粘贴复制的内容。