ক্লিপবোর্ড থেকে vi-সক্ষম zsh বা ব্যাশ শেলে আটকানো


15

আমি সিস্টেম ক্লিপবোর্ড (বা পাঠ্য নির্বাচন) থেকে কীবোর্ডটি ব্যবহার করে আমার "vi-like" শেল প্রম্পটে পেস্ট করতে সক্ষম হতে চাই। আমি সাধারণত zsh এবং কখনও কখনও ব্যাশ ব্যবহার করি। উভয় ক্ষেত্রেই আমার কাছে শেলটি vi-সদৃশ আচরণ ( bindkey -v/ set -o vi) দিয়ে সেট আপ করা আছে ।

তেজ সালে আচরণ আমি চাই কী অনুক্রম সাথে উপলব্ধ "+p। যদিও এই নির্দিষ্ট কী ক্রমটি কোনও vi- সক্ষম শেল প্রম্পটে প্রত্যাশা অনুযায়ী কাজ করে না। Zsh বা ব্যাশ শেল প্রম্পটে vi-like keybindings থাকা অবস্থায় কেবল কি-বোর্ড ব্যবহার করে এই বা অনুরূপ আচরণ সক্ষম করার কোনও উপায় আছে কি?

- সম্পাদনা -

ব্যবহারের ক্ষেত্রে: আমি প্রায়শই ফায়ারফক্সের মধ্যে পেন্টাড্যাকটাইল অ্যাডোন , একটি টার্মিনাল এমুলেটর এবং নিজেই ভিআইএম-এর সাথে নেভিগেট করি - কাস্টম কীগুলির সাহায্যে Xmonad উইন্ডো ম্যানেজারটি ঘুরে দেখার জন্য। তিনটি প্রোগ্রামেই vi-like keybindings রয়েছে, যা খুব দক্ষ ("আঙুলের মেমরি" এর জন্য) তাই কেবলমাত্র Vim সিনট্যাক্স (বা একটি খুব অনুরূপ বাক্য গঠন) ব্যবহার করে তাদের মধ্যে আদর্শ যোগাযোগের পাঠ্য হবে।

উত্তর:


9

জেডএস অভ্যন্তরীণ রেজিস্টারগুলি ছাড়া আর কিছুই সমর্থন করে না, এবং ব্যাশ যতদূর আমি জানি তেমন রেজিস্টারকে সমর্থন করে না। বড় আকারে, শেলগুলি ভিআইআর কমান্ড নয়, ভিআই কমান্ডকে সমর্থন করে।

Zsh এ, কমান্ড মোড থেকে এক্স নির্বাচন অ্যাক্সেসের জন্য একটি প্রমাণ-ধারণা's বাস্তব ব্যবহারের জন্য আপনি এই কৌশলগুলি বিস্তারিতভাবে জানাতে চাই। আমি xselপ্রোগ্রামটি ব্যবহার করি , আপনি xclipপরিবর্তে ব্যবহার করতে পারেন ; কীভাবে নিবন্ধগুলি ব্যবহার করে একটি ভিআইএম উদাহরণ থেকে অন্যটিতে অনুলিপি করবেন দেখুন । আপনি অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে আমি ব্যবহৃত পাবেন 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কার্সারের পরে বর্তমান এক্স নির্বাচন সন্নিবেশ করায় (অনুরূপ pবা এর মতো P)। ফাংশনটি vi-yank-x-selectionসর্বশেষ নিহত বা ইয়ঙ্কযুক্ত পাঠ্যটি X নির্বাচনের অনুলিপি করে। zle -Nফাংশনগুলি জ্লে উইজেট হিসাবে ঘোষণা করে (যেমন সংস্করণ আদেশগুলি) commands bindkey -avi কমান্ড মোডের জন্য বাইন্ডিং সেট করে।


xselআমার .zshrc- এ সামান্য পরিবর্তন করে আপনার প্রস্তাবিত কোডটি অনুলিপি করে অনুলিপি করার পরে এটি পুরোপুরি কাজ করেছিল (আমি '^ পি' এর পরিবর্তে '^ পি' বেছে নিয়েছি, '^ পি' এর মূল আচরণটি ওভাররাইট করে)
ডালকার

4

এখানে zsh (vi মোড) এর জন্য একটি সমাধান রয়েছে যা মূল উইজেটগুলিকে মোড়কে দেয় তাই ক্লিপবোর্ড সর্বদা সিঙ্ক্রোনাইজ থাকে

xclipআপনার পছন্দসই ক্লিপবোর্ড সরঞ্জাম দিয়ে প্রতিস্থাপন করুন ।

function x11-clip-wrap-widgets() {
    # NB: Assume we are the first wrapper and that we only wrap native widgets
    # See zsh-autosuggestions.zsh for a more generic and more robust wrapper
    local copy_or_paste=$1
    shift

    for widget in $@; do
        # Ugh, zsh doesn't have closures
        if [[ $copy_or_paste == "copy" ]]; then
            eval "
            function _x11-clip-wrapped-$widget() {
                zle .$widget
                xclip -in -selection clipboard <<<\$CUTBUFFER
            }
            "
        else
            eval "
            function _x11-clip-wrapped-$widget() {
                CUTBUFFER=\$(xclip -out -selection clipboard)
                zle .$widget
            }
            "
        fi

        zle -N $widget _x11-clip-wrapped-$widget
    done
}


local copy_widgets=(
    vi-yank vi-yank-eol vi-delete vi-backward-kill-word vi-change-whole-line
)
local paste_widgets=(
    vi-put-{before,after}
)

# NB: can atm. only wrap native widgets
x11-clip-wrap-widgets copy $copy_widgets
x11-clip-wrap-widgets paste  $paste_widgets

এটি একটি কবজির মতো কাজ করে xterm-termite
রোটারেটি

3

এক্স উইন্ডোর অধীনে বাছাই এবং ক্লিপবোর্ড পৃথক জিনিস এবং আইএমএইচও "ডেস্কটপ এনভায়রনমেন্টস" ইস্যুটিকে আগের চেয়ে আরও দুর্বল করে তুলেছে।

শিফ্ট-sertোকানো কি আপনার জন্য কাজ করে? খালি এক্স অ্যাপ্লিকেশনগুলিতে, যখন এই ধরনের বাঁধাই করা হয় তখন এটি নির্বাচনকে আটকানোতে বাধ্য।


নির্বাচন এবং ক্লিপবোর্ড আলাদা হওয়া এখানে সত্যই প্রাসঙ্গিক নয়, এমন একটি সমাধান যা একটির সাথে কাজ করে অন্যটির সাথে মানিয়ে নেওয়া সহজ be ডেস্কটপ পরিবেশ একটি জিনিস পরিবর্তন করে না; তাদের বিস্তারটি নির্বাচন থেকে দূরে এবং ক্লিপবোর্ডের দিকে ক্ষমতার ভারসাম্যের এক স্থান পরিবর্তন করেছে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

শিফ্ট-sertোকানো আমার পরিবেশে কাজ করে এবং অন্য সিস্টেমের মধ্যে ব্যবহারের জন্য এটি অবশ্যই জেনে রাখা ভাল। আমি ইয়ঙ্ক এবং / অথবা টার্মিনালগুলির মধ্যে, বা
ভিম

1

আপনি প্লাগইন ইনস্টল oh-my-zshও সক্ষম করে থাকলে এই সমাধানটি কাজ করে vi-mode

গিলস ' xselএবং zleভিত্তিক সমাধান আমার পক্ষে কার্যকর হয়নি। তবে, যেহেতু আমি ডিফল্টরূপে আমার সিস্টেম ক্লিপবোর্ডটি ব্যবহার করার জন্য ভিআইএমকে কনফিগার করেছি ( set clipboard=unnamedplusইন ~/.vimrc), তাই vবর্তমান কমান্ডটি খোলার জন্য আমি কেবল টার্মিনাল নরমাল মোডে টাইপ vimকরি এবং তারপরে যেকোন vimকমান্ডের সাহায্যে এটি এক্স-ক্লিপবোর্ডে অনুলিপি করতে পারি ।


এটি কীভাবে জেডএসএইচের সাথে সম্পর্কিত? আপনি কি :termনিওভিম এবং ভিমের নতুন সংস্করণগুলিতে এম্বেড পাওয়া সম্পর্কে কথা বলছেন ?
ডোরন বেহার

@ ডোরনবিহার আপনার যদি zsh এ vi-মোড সক্ষম vকরা থাকে তবে আপনি টার্মিনাল প্রম্পটের পরিবর্তে ভিএম-র ভিতরে বর্তমানে টাইপ করা কমান্ডটি সম্পাদনা করতে স্বাভাবিক মোডে টাইপ করতে পারেন ।
joelostblom

আপনি :termআপনার উত্তরে নব্যম এবং ভিমের বৈশিষ্ট্য সম্পর্কে কথা বলছেন তা উল্লেখ করা উচিত , অন্যথায় এটি মোটেই পরিষ্কার নয়।
ডোরন বেহার

@DoronBehar আমি কথা বলছি না :term। যাইহোক, আমি আবিষ্কার করেছি যে আমি যে কার্যকারিতাটির উল্লেখ করছি সেটি বাস্তবে সরবরাহ করা হয়েছে oh-my-zsh। আমি সেই অনুযায়ী উত্তর আপডেট করেছি।
joelostblom
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.