對於 不能使用 ctrl+shift+c/v, 以及 vim 中 沒有 , 暫存器的使用者
我來說一下我的解決方案
簡短的如下
在 .vimrc 增加如下對映
使用:
選中(visual mode) 下 按 ;y 複製
在任何模式 按 ;p 貼上
詳細的如下
說明
環境如下
前言
在網上看到最新的 Windows 版本支援用 ctrl+shift+c/v 進行復制貼上, 或者有的可以在 shell 視窗 > 屬性 > 選項中開啟這個功能。我這個不行。
而且 沒有 加號(系統)暫存器, 再加之懶得重新編譯 vim(開啟 featured) . 所以我只有另尋解決辦法.
在命令列下,已經有很好的解決方法: 可以右擊進行復制(先選中)和貼上另外 也可以使用 ctrl+c 複製 (有兩個功能,分別是中斷和複製)
vim 下就比較麻煩了。我嘗試了很多種方法,從操作的舒適程度,以及實現效果來選擇出最終最優的解決方法: 透過執行 windows 的 , 程式進行復制貼上
複製
從 VIM 中 複製文字到 Windoes 剪下板。
暫存器
透過 VIM 暫存器實現: 將 visual 模式下選中的文字複製到 vim 暫存器,然後將暫存器內容透過 shell 處理進入到剪下板。
首先選中(在 visual 模式下),用 將內容儲存到 暫存器,然後在命令列模式下 (執行 shell 命令。 a 暫存器的內容直接 作為引數文字傳遞(命令列模式下,再接暫存器名字,可以將暫存器內容複製過來)
然而複製的文字很可能不能直接在 shell 下作為引數,有特殊字元,比如 , 等等。所以要進行轉義,用 vim 的 函式 (我試了 , 效果不怎麼好)
把上面的操作對映到按鍵下, 我對映的是 , 就得到如下的 vim 鍵盤對映在 visual 模式下選中,依次按下 即可複製
然而在複製多行時,暫存器中會包含換行控制字元 或 ,,這在傳遞到 shell 中時執行會截斷這個引數(在引數還沒有輸入完全按下 enter 回車), 所以有時不會成功。而且有些字元 escape 也很難轉換為 shell 的原文字引數
所以,這個方法行不通
新建檔案
在 visual 模式下選中,依次按下 即可複製
各部分解釋如下
這個辦法可以很好地複製, 唯一的缺點就是開啟新 buffer 視窗,再關閉,螢幕畫面變化大,看著不舒服
write 命令
write 命令縮寫為 w, 直接使用就是 儲存緩衝區
他後面可以接 shell 命令與 shell 互動
如
這是對於整個檔案,也可以選擇一部分,而進入 visual 模式下選中,再按下, 則進入命令列且將選擇的位置也輸入進命令列這是可以 直接 傳遞給 程式。 執行後,選中的部分備剪下掉了,可以按 恢復
貼上
從 Windows 剪下板 貼上到 VIM
pastetoggle
如果 VIM 沒有設定 , 那麼可以直接右擊貼上,設定了之後要按住 再右擊貼上
然而這樣存在問題,就是 vim 設定了 autoindent, 它會錯誤的將貼上進的文字進行縮排, 而不是貼上原文。
這個辦法可以 , 解決,設定了 後,就可以原文貼上,
而這樣輸入命令切換很麻煩, 可以 ,或者其他按鍵,這樣按一次就可以切換 paste 狀態。
這樣比平常的 paste 動作 要多一個 操作,所以不好
windows paste 程式
在 瞭解到上面 複製時使用的 程式,我就在想是不是 windows 有也專門 的程式 (這個程式是和 cmd 互動的,加之, wsl 也可以執行 程式)
很遺憾,windows 沒有
對映如下
在任何模式下按下 即可貼上
這個是在新行開始貼上,如果在行內貼上,貼上的內容在一行內,可以按下 執行退格操作(同樣可以對映一下)
再在 檔案中增加如下對映
對於 不能使用 ctrl+shift+c/v, 以及 vim 中 沒有 , 暫存器的使用者
我來說一下我的解決方案
簡短的如下
在 .vimrc 增加如下對映
使用:
選中(visual mode) 下 按 ;y 複製
在任何模式 按 ;p 貼上
詳細的如下
說明
環境如下
Windows 10: 1709WSL: Ubuntu 1904 代表組合鍵 + 代表回車鍵 可以從 1 到 12, 代表 代表換行的控制字元,而不是 , 的連線,在 linux 上 換行為 ,在 VIM 輸入控制字元,比如 ,需要按下前言
在網上看到最新的 Windows 版本支援用 ctrl+shift+c/v 進行復制貼上, 或者有的可以在 shell 視窗 > 屬性 > 選項中開啟這個功能。我這個不行。
而且 沒有 加號(系統)暫存器, 再加之懶得重新編譯 vim(開啟 featured) . 所以我只有另尋解決辦法.
在命令列下,已經有很好的解決方法: 可以右擊進行復制(先選中)和貼上另外 也可以使用 ctrl+c 複製 (有兩個功能,分別是中斷和複製)
vim 下就比較麻煩了。我嘗試了很多種方法,從操作的舒適程度,以及實現效果來選擇出最終最優的解決方法: 透過執行 windows 的 , 程式進行復制貼上
複製
從 VIM 中 複製文字到 Windoes 剪下板。
暫存器
透過 VIM 暫存器實現: 將 visual 模式下選中的文字複製到 vim 暫存器,然後將暫存器內容透過 shell 處理進入到剪下板。
首先選中(在 visual 模式下),用 將內容儲存到 暫存器,然後在命令列模式下 (執行 shell 命令。 a 暫存器的內容直接 作為引數文字傳遞(命令列模式下,再接暫存器名字,可以將暫存器內容複製過來)
然而複製的文字很可能不能直接在 shell 下作為引數,有特殊字元,比如 , 等等。所以要進行轉義,用 vim 的 函式 (我試了 , 效果不怎麼好)
把上面的操作對映到按鍵下, 我對映的是 , 就得到如下的 vim 鍵盤對映在 visual 模式下選中,依次按下 即可複製
然而在複製多行時,暫存器中會包含換行控制字元 或 ,,這在傳遞到 shell 中時執行會截斷這個引數(在引數還沒有輸入完全按下 enter 回車), 所以有時不會成功。而且有些字元 escape 也很難轉換為 shell 的原文字引數
所以,這個方法行不通
新建檔案
在 visual 模式下選中,依次按下 即可複製
各部分解釋如下
: 複製選中區域到 暫存器: 新建檔案 到新視窗: 複製 內容到 檔案並儲存退出: 執行 shell 命令, shell 命令的內容就是複製 檔案內容到剪下板,再刪除檔案這個辦法可以很好地複製, 唯一的缺點就是開啟新 buffer 視窗,再關閉,螢幕畫面變化大,看著不舒服
write 命令
write 命令縮寫為 w, 直接使用就是 儲存緩衝區
他後面可以接 shell 命令與 shell 互動
如
這是對於整個檔案,也可以選擇一部分,而進入 visual 模式下選中,再按下, 則進入命令列且將選擇的位置也輸入進命令列這是可以 直接 傳遞給 程式。 執行後,選中的部分備剪下掉了,可以按 恢復
貼上
從 Windows 剪下板 貼上到 VIM
pastetoggle
如果 VIM 沒有設定 , 那麼可以直接右擊貼上,設定了之後要按住 再右擊貼上
然而這樣存在問題,就是 vim 設定了 autoindent, 它會錯誤的將貼上進的文字進行縮排, 而不是貼上原文。
這個辦法可以 , 解決,設定了 後,就可以原文貼上,
而這樣輸入命令切換很麻煩, 可以 ,或者其他按鍵,這樣按一次就可以切換 paste 狀態。
這樣比平常的 paste 動作 要多一個 操作,所以不好
windows paste 程式
在 瞭解到上面 複製時使用的 程式,我就在想是不是 windows 有也專門 的程式 (這個程式是和 cmd 互動的,加之, wsl 也可以執行 程式)
很遺憾,windows 沒有
對映如下
在任何模式下按下 即可貼上
這個是在新行開始貼上,如果在行內貼上,貼上的內容在一行內,可以按下 執行退格操作(同樣可以對映一下)
再在 檔案中增加如下對映