Bash

從剪貼板粘貼到啟用 vi 的 zsh 或 bash shell

  • August 2, 2020

我希望能夠使用鍵盤從系統剪貼板(或文本選擇)粘貼到我的“vi-like”shell 提示符中。我通常使用 zsh,有時使用 bash。在這兩種情況下,我都將 shell 設置為類似 vi 的行為 ( bindkey -v/ set -o vi)。

在 vim 中,我正在尋找的行為可通過 key sequence 獲得"+p。但是,在啟用 vi 的 shell 提示符下,這個特定的鍵序列不能按預期工作。有沒有什麼辦法可以啟用這個或類似的行為,只使用鍵盤,同時在 zsh 或 bash shell 提示符中保留類似 vi 的鍵綁定?

  • 編輯 -

案例:我經常在 Firefox 與Pentadactyl 外掛、終端模擬器和 vim 本身之間導航 - 使用帶有自定義鍵的Xmonad視窗管理器來移動。所有三個程序都有類似 vi 的鍵綁定,這非常有效(對於“手指記憶”),因此僅使用 vim 語法(或非常相似的語法)在它們之間進行文本通信是理想的。

Zsh 除了內部寄存器之外什麼都不支持,據我所知 bash 根本不支持寄存器。總的來說,shell 支持 vi 命令,而不是 vim 命令。

在 zsh 中,這是一個從命令模式訪問 X 選擇的概念驗證。對於實際使用,您需要詳細說明這些技術。我用的是xsel程序,你可以xclip改用;請參閱如何使用寄存器從一個 vim 實例複製到另一個。您會在zle 手冊中找到我使用的功能。

vi-append-x-selection () { RBUFFER=$(xsel -o -p </dev/null)$RBUFFER; }
zle -N vi-append-x-selection
bindkey -a '^X' vi-append-x-selection
vi-yank-x-selection () { print -rn -- $CUTBUFFER | xsel -i -p; }
zle -N vi-yank-x-selection
bindkey -a '^Y' vi-yank-x-selection

該函式vi-append-x-selection在游標之後插入目前 X 選擇(類似於por P)。該函式vi-yank-x-selection將最後殺死或拉出的文本複製到 X 選擇。zle -N將函式聲明為 zle 小元件(即編輯命令)。bindkey -a為 vi 命令模式設置綁定。

引用自:https://unix.stackexchange.com/questions/25765