一文搞懂vim復制粘貼


轉載自本人獨立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/

概述

復制粘貼是文本編輯最常用的功能,但是在vim中復制粘貼還是有點麻煩的,有一點學習成本。本文總結了使用vim復制粘貼的典型場景和使用方法,希望對讀者有幫助。

vim內部復制、粘貼、剪切

選擇文本

  • v+光標移動 (按字符選擇)高亮選中所要的文本,然后進行各種操作(比如,d表示刪除)。
  • V (按行選擇)
  • v+選中的內容+c 更改選中的文字

復制:y(ank)

  • y 用v命令選中文本后,用y進行復制
  • yy 復制當前行,然后用p進行粘貼
  • 5yy 復制從當前行開始的5行
  • y_ 等同於yy
  • Y 等同於yy
  • yw 復制當前單詞
  • y$ 從當前位置復制到行尾
  • y0 從當前位置復制到行首
  • y^ 從當前位置復制到第一個非空白字符
  • yG 從當前行復制到文件結束
  • y20G 從當前行復制到第20行
  • y?bar 復制至上一個出現bar的位置

粘貼:p(aste)

  • p(小寫) 在光標位置之后粘貼
  • P(大寫) 在光標位置之前粘貼

剪切

  • v + 方向鍵(hjkl)選中內容 + d 剪切 + p粘貼

剪貼板

默認剪貼板

vim提供12個剪貼板,它們的名字分別為vim有11個粘貼板,分別是012...9a。如果開啟了系統剪貼板,則會另外多出兩個:+*。使用:reg命令,可以查看各個粘貼板里的內容。

:reg

在vim中簡單用y只是復制到(雙引號)粘貼板里,同樣用p粘貼的也是這個粘貼板里的內容。

復制和粘貼到指定剪貼板

要將vim的內容復制到某個粘貼板,需要退出編輯模式,進入正常模式后,選擇要復制的內容,然后按"Ny完成復制,其中N為粘貼板號(注意是按一下雙引號然后按粘貼板號最后按y),例如要把內容復制到粘貼板a,選中內容后按"ay就可以了。

要將vim某個粘貼板里的內容粘貼進來,需要退出編輯模式,在正常模式按"Np,其中N為粘貼板號。比如,可以按"5p將5號粘貼板里的內容粘貼進來,也可以按"+p將系統全局粘貼板里的內容粘貼進來。

系統剪貼板

Vim支持系統剪貼板,需要打開clipboard功能。使用下面的命令,檢查當前版本的Vim,是否支持clipboard。

$ vim --version | grep "clipboard"
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard
root@sz ➜  ~ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 07 2019 15:35:43)

-clipboard代表不支持+clipboard代表支持。
如果不支持的話,需要安裝gvim或者在編譯的時候開啟系統剪貼板選項。

vim復制到系統剪貼板

  • "*y
  • "+y
  • "+2yy – 復制兩行
  • {Visual}"+y - copy the selected text into the system clipboard
  • "+y{motion} - copy the text specified by {motion} into the system clipboard
  • :[range]yank + - copy the text specified by [range] into the system clipboard

vim剪切到系統剪貼板

  • "+dd – 剪切一行

從系統剪貼板粘貼到vim

  • "*p
  • "+p
  • Shift+Insert
  • :put + - Ex command puts contents of system clipboard on a new line
  • <C-r>+ - From insert mode (or commandline mode)

"+p比 Ctrl-v 命令更好,它可以更快更可靠地處理大塊文本的粘貼,也能夠避免粘貼大量文本時,發生每行行首的自動縮進累積,因為Ctrl-v是通過系統緩存的stream處理,一行一行地處理粘貼的文本。

設置vim默認使用系統剪貼板

確定vim支持+clipboard后,如果想y/p直接和系統剪貼板打通,可以在~/.vimrc中加上以下配置):

set clipboard^=unnamed,unnamedplus

其中unnamed代表*寄存器,unnamedplus代表+寄存器。在mac系統中,兩者都一樣;一般在linux系統中+*是不同的,+對應ctrl + c,ctrl + v的桌面系統剪貼板,*對應x桌面系統的剪貼板(用鼠標選擇復制,用鼠標中鍵粘貼)。

服務器vim復制到本地剪貼板

通過ssh連接到linux服務器時,vim是跑在遠程服務器的,不能使用y復制到本地的剪貼板。這時有幾個方法:

cmd + c

用鼠標選中文字cmd + c復制(windows下ctrl + c復制),cmd + v粘貼到本地。這個方法是最自然的,但是想要用這個方法有幾個前提:

  • vim配置中開啟鼠標支持,.vimrc文件中加上
set mouse=a
  • terminal客戶端關閉mouse reporting選項,否則鼠標點擊vim界面會進入visual模式。參見我這篇文章解決iterm2中vim選中文字不能復制的問題
  • 如果使用tmux,tmux需要配置支持鼠標滾輪,否則最多只能復制當前頁面的內容

本地vim通過scp編輯遠程文件

使用本地vim通過scp直接編輯遠程文件。這樣就可以使用本地寄存器"+y"復制了。這種方法對遠程vim配置沒有要求。

vim scp://remoteuser@server.com//absolute/path/to/file

注意com和absolute間是兩個反斜杠//並不是敲錯了。

參考鏈接

概述

復制粘貼是文本編輯最常用的功能,但是在vim中復制粘貼還是有點麻煩的,有一點學習成本。本文總結了使用vim復制粘貼的典型場景和使用方法,希望對讀者有幫助。

vim內部復制、粘貼、剪切

選擇文本

  • v+光標移動 (按字符選擇)高亮選中所要的文本,然后進行各種操作(比如,d表示刪除)。
  • V (按行選擇)
  • v+選中的內容+c 更改選中的文字

復制:y(ank)

  • y 用v命令選中文本后,用y進行復制
  • yy 復制當前行,然后用p進行粘貼
  • 5yy 復制從當前行開始的5行
  • y_ 等同於yy
  • Y 等同於yy
  • yw 復制當前單詞
  • y$ 從當前位置復制到行尾
  • y0 從當前位置復制到行首
  • y^ 從當前位置復制到第一個非空白字符
  • yG 從當前行復制到文件結束
  • y20G 從當前行復制到第20行
  • y?bar 復制至上一個出現bar的位置

粘貼:p(aste)

  • p(小寫) 在光標位置之后粘貼
  • P(大寫) 在光標位置之前粘貼

剪切

  • v + 方向鍵(hjkl)選中內容 + d 剪切 + p粘貼

剪貼板

默認剪貼板

vim提供12個剪貼板,它們的名字分別為vim有11個粘貼板,分別是012...9a。如果開啟了系統剪貼板,則會另外多出兩個:+*。使用:reg命令,可以查看各個粘貼板里的內容。

:reg

在vim中簡單用y只是復制到(雙引號)粘貼板里,同樣用p粘貼的也是這個粘貼板里的內容。

復制和粘貼到指定剪貼板

要將vim的內容復制到某個粘貼板,需要退出編輯模式,進入正常模式后,選擇要復制的內容,然后按"Ny完成復制,其中N為粘貼板號(注意是按一下雙引號然后按粘貼板號最后按y),例如要把內容復制到粘貼板a,選中內容后按"ay就可以了。

要將vim某個粘貼板里的內容粘貼進來,需要退出編輯模式,在正常模式按"Np,其中N為粘貼板號。比如,可以按"5p將5號粘貼板里的內容粘貼進來,也可以按"+p將系統全局粘貼板里的內容粘貼進來。

系統剪貼板

Vim支持系統剪貼板,需要打開clipboard功能。使用下面的命令,檢查當前版本的Vim,是否支持clipboard。

$ vim --version | grep "clipboard"
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard
root@sz ➜  ~ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 07 2019 15:35:43)

-clipboard代表不支持+clipboard代表支持。
如果不支持的話,需要安裝gvim或者在編譯的時候開啟系統剪貼板選項。

vim復制到系統剪貼板

  • "*y
  • "+y
  • "+2yy – 復制兩行
  • {Visual}"+y - copy the selected text into the system clipboard
  • "+y{motion} - copy the text specified by {motion} into the system clipboard
  • :[range]yank + - copy the text specified by [range] into the system clipboard

vim剪切到系統剪貼板

  • "+dd – 剪切一行

從系統剪貼板粘貼到vim

  • "*p
  • "+p
  • Shift+Insert
  • :put + - Ex command puts contents of system clipboard on a new line
  • <C-r>+ - From insert mode (or commandline mode)

"+p比 Ctrl-v 命令更好,它可以更快更可靠地處理大塊文本的粘貼,也能夠避免粘貼大量文本時,發生每行行首的自動縮進累積,因為Ctrl-v是通過系統緩存的stream處理,一行一行地處理粘貼的文本。

設置vim默認使用系統剪貼板

確定vim支持+clipboard后,如果想y/p直接和系統剪貼板打通,可以在~/.vimrc中加上以下配置):

set clipboard^=unnamed,unnamedplus

其中unnamed代表*寄存器,unnamedplus代表+寄存器。在mac系統中,兩者都一樣;一般在linux系統中+*是不同的,+對應ctrl + c,ctrl + v的桌面系統剪貼板,*對應x桌面系統的剪貼板(用鼠標選擇復制,用鼠標中鍵粘貼)。

服務器vim復制到本地剪貼板

通過ssh連接到linux服務器時,vim是跑在遠程服務器的,不能使用y復制到本地的剪貼板。這時有幾個方法:

cmd + c

用鼠標選中文字cmd + c復制(windows下ctrl + c復制),cmd + v粘貼到本地。這個方法是最自然的,但是想要用這個方法有幾個前提:

  • vim配置中開啟鼠標支持,.vimrc文件中加上
set mouse=a
  • terminal客戶端關閉mouse reporting選項,否則鼠標點擊vim界面會進入visual模式。參見我這篇文章解決iterm2中vim選中文字不能復制的問題
  • 如果使用tmux,tmux需要配置支持鼠標滾輪,否則最多只能復制當前頁面的內容

本地vim通過scp編輯遠程文件

使用本地vim通過scp直接編輯遠程文件。這樣就可以使用本地寄存器"+y"復制了。這種方法對遠程vim配置沒有要求。

vim scp://remoteuser@server.com//absolute/path/to/file

注意com和absolute間是兩個反斜杠//並不是敲錯了。

參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM