
私はArchlinuxの端末エミュレータとしてzsh + rxvt-unicodeを使用しています。 +を使用してCtrl端末でナビゲーションを正常に設定しましたが、Arrow keysShift +矢印(または単語全体を選択するにはCtrl + Shift +矢印)を押すと端末からテキストを選択できません。数日間解決策を検索しましたが、見つかりませんでした。活性化keyboard-select
しても.Xresources
効果はありません。それで、私が興味を持っているのは、すべてのテキストエディタでできるように、マウスを使わずにコンソールでテキストを選択するにはどうすればよいですか?
答え1
私は3つのステップを経てこれをしました。
ステップ1。メタキーを作動させる:
入れてくださいURxvt*altSendsEscape: true
。~/.Xresources
それからそれをxrdb ~/.Xresources
入れてください~/.xinitrc
。
xtermの場合、~/.Xresources
場所にxterm*metaSendsEscape: true
。
rxvtの場合、私の直感では同じか非常に似ているようです。
ステップ2。カーソルの動きを修正
これはEmacsメタキーを提供するので、Escキーを押す必要はありません。 Bashの使用中にこれを設定して動作させ、zshに切り替えました。しかし、zshとbashはEmacsのキーバインディングを使った単語の移動について少し違うようです。 Emacsから得られた最も近い動作は次のとおりです。修理する。 Emacsに精通している場合は、シェルで同じカーソル移動を実行するのが非常に便利です。
たとえば、C-SPCで表示を設定し、以前に入力した単語をMbで表示し、Cwで終わり(またはMwで削除せず)、Cyで取り出すなどの操作を実行します。
わかりましたが、Ctrl-Leftなどが欲しいのはわかりますが巨大なダウントレーディング:この場合は、次のことを行う必要があります。到着各カーソル移動について戻る続けて入力してください。膨大な迷惑と生産性の損失があります! 「新しい」(しかしより良い)ショートカットは最初は堅いですが、誰でも無理やりショートカットを使うように助言したいと思います。するとすぐに(続けて入力すれば!)自然に出てきます。
ステップ3。 Xクリップボードにコピーするには、以下を設定しました(から~/.zshrc
)。
# clipboard
X_CLIPBOARD='xclip -d ":0" -selection clipboard'
alias xi="$X_CLIPBOARD" # `-i` (or `-in`) is default
alias xo="$X_CLIPBOARD -o"
これで、出力をパイプで接続して任意のxi
場所に貼り付けることができます(XではなくttyでもXが実行されているかのように機能します-d
)。シェルコマンドで使用するにはbacktickだけですxo
。
xo
Emacs(ttyで実行)でそれを使用するには、上記のエイリアスの機能を複製するスクリプトを作成する必要がありました。
#!/bin/zsh
xclip -d ":0" -o -selection clipboard
それから~/.emacs
:
(defun pst ()
"Inserts the X clipboard (xclip -d ':0' -o -selection clipboard)
at point. `M-1' (the '(1)) to insert in the current buffer."
(interactive)
(shell-command "pst" '(1))
(end-of-line) )
その理由は、Emacsをzshエイリアスにリンクする方法が見つからないためです。これは可能だと思われます。とにかく電話してみてくださいM-x pst
。
編集する
forward-char
Emacsが挿入したばかりの文字数と同じ数の文字を持つようにこの回避策を追加しました。 (以下のコードの最初の部分はスクリプトです。上記を参照してください。また変更されました。)私は中間ファイルを使用してこれを行います。たとえプログラマーとしてこれは私の直観にずれるが(悪い習慣で)、まあ、これは次のようなようです。働く明らかにend-of-line
(私の最初の答えでは)文の真ん中に単語を挿入したいので、それは良いことではありません。
#!/bin/zsh
CLIP=`xclip -d ":0" -o -selection clipboard`
CLIP_LEN=`echo -n $CLIP | wc -c`
echo "(set-variable '*clip-len* $CLIP_LEN)" > ~/.clip_len
echo -n $CLIP
(setq *clip-len* 0)
(defun pst ()
"Inserts the X clipboard (xclip -d ':0' -o -selection clipboard)
at point. `M-1' (the '(1)) to insert in the current buffer."
(interactive)
(shell-command "pst" '(1))
(load-file "~/.clip_len")
(forward-char *clip-len*) )