かなり大きなファイルがあるため、コンテンツ全体をどこかにコピーする必要がありますが、ページを下にスクロールすると、選択したすべてのデータが選択されなくなります。ブロックごとにコピーして貼り付けることもできますが、現在のクリップボードデータの最後に内容を追加できるようにするだけで、データがたくさんあるため、はるかに簡単です。それは可能ですか?
これは、キーボードショートカットを使用して、これをクリップボードにコピーできるようにするためです。
I am some Nice new text.
これが既にある場合:
I am the old text.
貼り付けたときに次のようになります。
I am the old text.
I am some Nice new text.
したがって、私はこれから本当にしたい3つのことがあります(これを行うには3つのキーボードショートカットがあります):
クリップボードの最後にデータを追加し、それを RETURN その前に(上記の例に示すように)。
クリップボードの最後にデータを追加しますが、データがないようにします RETURN 最初に同じ行で継続するように、その前に。
このすべてを持っているが、データがクリップボードの先頭に置かれ、現在そこにあるすべてのデータの前に置かれるようにする。
Ubuntu GNOME 16.04とGNOME 3.20を実行しています。
簡単ですが、最初にツールxsel
をインストールする必要があります。
Sudo apt-get install xsel
TL; DR:これは、最終的にショートカットに使用する可能性があるコマンドです。より単純なバリアントで十分な場合でも、均一性とカスタマイズを容易にするために、どこでもprintf
のバージョンを使用しています。
選択範囲をクリップボードの最後に直接追加します。
bash -c 'printf "%b%b" "$(xsel -b)" "$(xsel)" | xsel -ib ; xsel -c'
改行の後、クリップボードの最後に選択を追加します。
bash -c 'printf "%b\n%b" "$(xsel -b)" "$(xsel)" | xsel -ib ; xsel -c'
選択範囲をクリップボードの先頭に直接追加します。
bash -c 'printf "%b%b" "$(xsel)" "$(xsel -b)" | xsel -ib ; xsel -c'
改行後に選択範囲をクリップボードの先頭に追加します。
bash -c 'printf "%b\n%b" "$(xsel)" "$(xsel -b)" | xsel -ib ; xsel -c'
同じコンテンツが二重に追加されるのを防ぐために、クリップボードに追加した後にプライマリバッファーリセットが含まれています。そうしたくない場合は、各コマンドの末尾から; xsel -c
を削除してください。
詳細な説明:
Xには3つのバッファー、primary selection、secondary selection、およびclipboardが含まれていることを知っておく必要があります。
あなたはクリップボードを知っています Ctrl+C、 Ctrl+V など。コピーや貼り付けに通常使用するバッファーです。
ただし、主な選択項目は、選択されたテキストが自動的に含まれるバッファです。どのウィンドウにいても、追加のユーザー操作なしで。
問題が1つあります。テキストスニペットを選択するとバッファが更新されますが、他の場所をクリックして選択をキャンセルしてもバッファはクリアされません。最後の選択内容が引き続き含まれます。
二次選択は、いくつかのプログラムでのみ使用され、ここでは興味深いものではありません。
つまり、次の動作を模倣できるということです。 Ctrl+C 次のコマンドを使用して、プライマリ選択(最後に強調表示されたテキスト)をクリップボードにコピーします。
xsel | xsel -ib
引数なしのxsel
は、プライマリ選択のコンテンツをSTDOUTに出力します。 xsel -ab
は、STDINのデータをクリップボードに書き込みます(-i
)(-b
)。
データを置き換えるのではなく、現在のクリップボードの内容に(改行せずに)直接追加するには、-a
の代わりに-i
オプションを使用します。このコマンドは、最後に選択したテキストスニペットを現在のクリップボードのコンテンツに追加します。
xsel | xsel -ab
追加の改行やその他の書式設定が本当に必要な場合は、printf
または処理に使用する他のツールを介してデータをパイプ処理できます。以下は、最後の選択と現在のクリップボードコンテンツの両方を読み取り、改行を使用してそれらを結合する例です。
printf "%b\n%b" "$(xsel -b)" "$(xsel)" | xsel -ib
xsel -b
は、現在のクリップボードのコンテンツを返します。 printf
のフォーマット文字列は、%b
を引数のプレースホルダーとして使用し、\n
は改行を表します。 man printf
と入力すると、printf
の詳細を確認できます。
文字列の末尾の2つの引数を切り替えることにより、順序を逆にして末尾ではなく先頭に追加できます。
誤って同じデータをクリップボードに2回追加しないようにしたい場合(2回追加したい場合は再度選択する必要があります!)、次のコマンドを実行した後、プライマリ選択バッファーを手動でクリアできます。
xsel -c
次のように、基本的なクリップボード追加コマンドの後に単純に実行します。
printf "%b\n%b" "$(xsel -b)" "$(xsel)" | xsel -ib ; xsel -c
これをすべて知っているので、キーボードショートカット用のコマンドを書くことができます。ただし、私たちのワンライナーはすべてパイピングなどのBash機能を多用しているので、Bashで実行する必要があります。
bash -c 'COMMAND'
ショートカットの作成に適したコマンドリストについては、回答の上部にあるTL; DRセクションを参照してください。
Xサーバーには複数のクリップボードがあります。あるもの Ctrl + C クリップボードと呼ばれ、何かを強調表示するものはプライマリと呼ばれます。 xclip
は、いずれかの出力を貼り付けることができます。たとえば、あなたの質問の一部をコピーしましたが、ターミナルで他のテキストをハイライトしました:
さらに、キーボードショートカットに接続されているスクリプトでそのアイデアを使用できます。実際、 github Gist として投稿されているスクリプトを書きました。
基本的な考え方は、キーボードショートカットにバインドすることです。追加するものを強調表示し、ショートカットを押します。たとえば、私はにバインドしました Ctrl+Alt+V 。正確なコマンドはpython /path/to/file.py
です
I have a rather large file
部分をハイライトし、コピーして Ctrl + CThat is so that I can have a keyboard shortcut
など、他の何かを強調表示しますI have a rather large fileThat is so that I can have a keyboard shortcut
import gi
gi.require_version('Notify', '0.7')
from gi.repository import Notify
import subprocess
import os
import sys
# This script is meant to be bound to keyboard shortcut
def send_notification(title, text):
Notify.init(sys.argv[0])
n = Notify.Notification.new(title, text)
n.show()
def run_cmd(cmdlist):
# function for running
try:
stdout = subprocess.check_output(cmdlist)
except subprocess.CalledProcessError:
send_notification(sys.argv[0],"Clipboard error")
sys.exit(1)
else:
if stdout:
return stdout
# get contents of both clipboards
clip = run_cmd("xclip -o -sel clip".split())
primary = run_cmd("xclip -o -sel primary".split())
# write to temp file contents
# of both clipboards appended
temp_file = "/tmp/append.clip"
f = open(temp_file, "w")
f.write( clip + primary )
f.close()
# Read the new contents into clipboard
run_cmd(("xclip -sel clip " + temp_file).split())
# clean up
os.remove(temp_file)
xclip
はSudo apt-get install xclip
経由でインストールする必要がありますsed
およびpythonのre
スタイル)を使用して、クリップボードに繰り返し文字列を追加できます。たとえば、同じ文字列を何度も何度も追加する必要がある場合は、次のpython re
正規表現を使用できます。短いBashスクリプトを使用する別の非常に簡単な方法を次に示します。まず、xclipがインストールされていることを確認してください。次に、次のようにbashスクリプトを作成します。
#!bin/bash
p=$(xclip -selection primary -o)
c=$(xclip -selection clipboard -o)
new=$'\n'
echo "$c$new$p" | xclip -selection clip
このファイルにapndpc.shという名前を付けて、〜/ myscriptsというフォルダーに入れましょう。ユーザー定義キーをこれにバインドします。システム設定>>キーボードでこれを行い、ショートカットタブをクリックしてください。 [カスタムショートカット]をクリックし、[+]記号をクリックして、目的のキーの組み合わせを追加します。コマンドボックスに以下を入力します。
bash -c 'bash〜/ myscripts/apndclp.sh'
次に、キーの組み合わせを定義します。 ALT + 3を使用してアクションをトリガーします。
それだ。大規模なコピー操作の準備ができました。通常のCtrl + c(または右クリックしてコピーを選択)を使用して、テキストの最初のチャンクをコピーします。次のチャンクを選択し(コピーのみを選択しない)、ショートカットキー(ATL + 3)を押します。これにより、選択したテキストがクリップボードに追加されます。完了するまでそれを続けてください。その後、いつものように貼り付けます。 Ctrl + v(または右クリックして貼り付けを選択)を押して、最終的に蓄積されたテキストをダンプします。
上記のスクリプトで文字列操作が気に入らない場合は、代わりにこのスクリプトを使用します。
#!bin/bash
# this is another version of clipboard append tool
# here we use a temporary file to append highlighted text to the clipboard
# the temporary file is deleted at the end of the operation
tmpfile="file111000111"
xclip -selection clipboard -o > $tmpfile # first dump the current clipboard to the tmpfile
printf '\n' >> $tmpfile # then add new line
xclip -selection primary -o >> $tmpfile # and finally add the highlighted text
cat $tmpfile | xclip -selection clip # now read the file back into the clipboard
rm $tmpfile # and remove the tempfile
Clipitと呼ばれるクリップボードマネージャーを使用します。
次に、キーボードで最後のものを見たいときはいつでもコンソールでこれを行います:
strings ~/.local/share/clipit/history
\n
で区切られたクリップボード履歴を印刷します。