У меня есть довольно большой файл, я должен скопировать все содержание где-нибудь, но когда я прокручиваю страницу вниз все данные, я выбрал, становится отмененным выбор. Я мог просто скопировать и вставить блок блоком, но я найду это намного легче, поскольку существует много данных, чтобы просто смочь добавить содержание в конец текущих данных буфера обмена. Это возможно?
Это - то, так, чтобы у меня могло быть сочетание клавиш, которое позволит мне скопировать это в буфер обмена:
I am some nice new text.
Когда это - то, что уже там:
I am the old text.
И имейте его, похожи на это при вставке:
I am the old text.
I am some nice new text.
Таким образом, существует 3 вещи, которые я действительно хотел бы от этого (у меня будет 3 отдельных сочетания клавиш, чтобы сделать это):
Добавьте данные в конец буфера обмена и имейте его, вставил ВОЗВРАТ перед ним (как показано в примере выше).
Добавьте данные в конец буфера обмена, но имейте его так, чтобы не было ВОЗВРАТА перед ним так, чтобы это продвинулось бы на той же строке первоначально.
Имейте все это, но так, чтобы данные были помещены в начале буфера обмена перед всеми данными, которые в настоящее время являются там.
Я выполняю 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 буфера, основной выбор, вторичный выбор и буфер обмена.
Вы знаете буфер обмена от Ctrl+C, Ctrl+V и т.д. Это - буфер, который Вы обычно используете для копии и вставляете материал.
Основной выбор, хотя буфер, который всегда автоматически содержит текст, который Вы выбираете, неважно, какое окно это находится в и без любого дополнительного взаимодействия с пользователем.
У нас просто есть одна проблема: буфер обновляется момент, Вы выбираете текстовый отрывок, но это не становится очищенным, когда Вы нажимаете где-либо еще для отмены выбора. Это будет все еще содержать контент Вашего последнего выбора.
Вторичный выбор только используется немногими программами и не интересный для нас здесь.
Это означает, что мы можем подражать поведению Ctrl+C с этой командой, ниже которых копий основной выбор (длятся выделенный текст) к буферу обмена:
xsel | xsel -ib
xsel
без любых аргументов печатает контент основного выбора к STDOUT. xsel -ab
записи (-i
) данные от STDIN до буфера обмена (-b
).
Для прямого добавления данных к текущему содержанию буфера обмена (без промежуточного разрыва строки) вместо того, чтобы заменить его мы используем -a
опция вместо -i
. Эта команда добавит последний выбранный текстовый отрывок к текущему содержанию буфера обмена:
xsel | xsel -ab
Если Вы действительно хотите дополнительный разрыв строки или какое-либо другое форматирование, мы можем передать данные по каналу через printf
или любой другой инструмент, который Вы хотите использовать для обработки его. Вот пример, который читает и последний выбор и текущее содержание буфера обмена и присоединяется к ним вместе использование новой строки:
printf "%b\n%b" "$(xsel -b)" "$(xsel)" | xsel -ib
xsel -b
возвращает текущее содержание буфера обмена. Строка формата printf
использование %b
как заполнитель для аргументов, \n
представляет разрыв строки. Можно узнать больше о printf
путем ввода man printf
.
Путем переключения этих двух аргументов в конец строки можно инвертировать их порядок и добавить к началу вместо конца.
Если Вы не хотите добавлять те же данные к буферу обмена дважды случайно (необходимо будет выбрать его снова, если Вы хотите добавить его дважды!), можно очистить основной буфер выбора вручную после того, как команда была выполнена с помощью этого:
xsel -c
Просто выполненный, что после основной команды добавления буфера обмена, как этот:
printf "%b\n%b" "$(xsel -b)" "$(xsel)" | xsel -ib ; xsel -c
Так зная все это, можно записать команды для сочетаний клавиш, которые делают точно, что Вы хотите, но помните, что наши остроты, все делают интенсивное использование функций Bash как передача по каналу, таким образом, необходимо выполнить их с Bash:
bash -c 'COMMAND'
Посмотрите TL; раздел DR наверху ответа для списка команд, подходящего для создания ярлыков.
Вот другой очень легкий метод, который использует короткий сценарий Bash. Сначала удостоверьтесь, что у Вас есть установленный xclip. Затем создайте свой сценарий удара следующим образом:
#!bin/bash
p=$(xclip -selection primary -o)
c=$(xclip -selection clipboard -o)
new= Позволяют нам назвать этот файл apndpc.sh и поместить его в некоторую папку, сказать, что ~/myscripts Теперь связывают определяемый пользователем ключ к этому. Сделайте это Параметрами настройки системы>> Клавиатура и нажмите на вкладку Shortcuts. Нажмите на Custom Shortcuts и затем нажмите +, подают знак добавлять Ваше желаемое сочетание клавиш. В помещенном поле команды:
удар-c 'колотит ~/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
\n'
echo "$c$new$p" | xclip -selection clip
Позволяют нам назвать этот файл apndpc.sh и поместить его в некоторую папку, сказать, что ~/myscripts Теперь связывают определяемый пользователем ключ к этому. Сделайте это Параметрами настройки системы>> Клавиатура и нажмите на вкладку Shortcuts. Нажмите на Custom Shortcuts и затем нажмите +, подают знак добавлять Ваше желаемое сочетание клавиш. В помещенном поле команды:
удар-c 'колотит ~/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
X-сервер имеет несколько буферов обмена. Тот с Ctrl + C упоминается как буфер обмена, тот, где Вы выделяетесь, что-то называют основным. xclip
позволяет вставлять вывод также. Например, я скопировал часть Вашего вопроса, но выделил некоторый другой текст в терминале:
Можно далее использовать ту идею в сценарии, который подключен к сочетанию клавиш. На самом деле я записал сценарий, который отправляется как суть GitHub
Основная идея состоит в том, чтобы связать его с сочетанием клавиш. Выделите то, что Вы хотите добавленный, затем нажмите ярлык. Например, я связал мой с 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
regex:Я использую менеджера по буферу обмена, названного clipit.
Затем каждый раз, когда я хочу видеть последние вещи на клавиатуре, я делаю это на консоли:
strings ~/.local/share/clipit/history
Это распечатает историю буфера обмена, разделенную \n
.