2013-01-05 5 views
14

クイックキーボードコマンドシーケンスを使用して、現在のコマンドをbashプロンプトでクリップボードにコピーします。bashプロンプトの現在のコマンドをクリップボードにコピー

たとえば、最後のbashコマンドをクリップボードにコピーするには、+ [some command sequence]を押してコピーします。たとえば、bashのコマンドでコマンドを検索するには、Ctrl + Rを使用して検索し、コマンドプロンプトで表示してから[some command sequence]などをコピーします。

私の現在のソリューションはbashパイプ:だからPipe to/from the clipboard

、クリップボードに前のコマンドをコピーする:

など、あまりにもひどいものではなく、コピーに、コマンドが最後のコマンドではありませんどのような場合
echo "!!" | pbcopy 

私が試したことを達成するための適切な方法ここで達成することはできますか?インスピレーションのためのラウリのポスト@撮影

+0

を? – alinsoar

+0

OS Xが行います。 LinuxとOS Xのソリューションが理想的です。 –

答えて

8

は、ここではbindコマンドを使用してソリューションです:

bind '"\C-]":"\C-e\C-u pbcopy <<"EOF"\n\C-y\nEOF\n"' 

CTRL-]クリップボードに現在bashプロンプト上にあるものは何でもコピーします。

これを永続化するには、上記のようにbindコマンドを~/.bashrcに追加するか、外側の引用符を削除して呼び出しの 'バインド'部分を削除し、結果を~/.inputrcに追加することができます。

非OS-Xユーザーは、おそらくxclipという適切なコマンドでpbcopyを交換する必要があります。

エコー+パイプ手法の代わりに引用されたheredocが使用され、bashプロンプトのコマンドの一重引用符と二重引用符が保存されます。たとえば、この手法では、Ctrlキーを押しながら[]を押して、ターミナルプロンプトから実際のバインドコマンドをコピーして、ここに回答に貼り付けることができました。したがって、heredoc技術はここでbindコマンドのすべての特殊文字を処理します。

+0

このコマンドを変更して、最後に新しい行をコピーから除外する方法は?この方法でターミナルコマンドをコピーすると、最後の改行を貼り付けると自動的にコマンドが実行されますが、これは実行する前に貼り付けられたコマンドを編集する必要があります。私は '\ n'を削除しようとしましたが動作しません。 – certainlyakey

+1

"非OS-Xユーザーは、適切なコマンド、おそらくxclipでpbcopyを交換する必要があります。"→[こちらを参照](http://jetpackweb.com/blog/2009/09/23/pbcopy-in-ubuntu -command-line-clipboard /) –

1

xselはあなたが.inputrcのでこれを追加することができ、あなたのシステムにインストールされている場合:

C-]: '\C-e\C-ucat <<EOF | tr -d "\\n" | xsel -ib\n\C-y\nEOF\n' 

xclipがインストールされている場合は別の方法として、あなたはこれを追加することができます。

C-]: '\C-e\C-ucat <<EOF | tr -d "\\n" | xclip -se c\n\C-y\nEOF\n' 

お知らせ: @ Claytonの答えから使用されたコード。

5

あなたはbashの4にbind -xREADLINE_LINEを使用することができます。

copyline() { printf %s "$READLINE_LINE"|pbcopy; } 
bind -x '"\C-xc":copyline' 

あなたはbashの4をインストールしてbrew install bash;echo /usr/local/bin/bash|sudo tee -a /etc/shells;chsh -s /usr/local/bin/bashを実行して、デフォルトのログインシェルにすることができます。

また、私は最後のコマンドをコピーするには、この機能を使用します。

cl() { history -p '!!'|tr -d \\n|pbcopy; } 
2

私はMacOSののためのシンプルなzshの実装を書いて、今日の時間のまともな金額を費やしました。次のように使用方法は次のとおりです。

example command:   git commit -m "Changed a few things" 
command that copies:  c git commit -m "Changed a few things" 

# The second command does not actually execute the command, it just copies it. 

# Using zsh, this should reduce the whole process to about 3 keystrokes: 
# 
# 1) CTRL + A (to go to the beginning of the line) 
# 2) 'c' + ' ' 
# 3) ENTER 

preexec()は、Enterキーを押すと右に呼び出されるzshのフック関数ですが、コマンドが実際に実行される前に。 。

1)行います、我々はあなたが未処理、元のコマンドにアクセスすることを可能にする、preexec()を使用したいと思うでしょう

擬似コードはこのように書きます「"」のような特定の文字のzshのストリップ引数以降

必ずコマンドは最初

2)それがない場合は、にtemp変数

3)パイプ一時変数に、charで、文字をコマンド全体をコピーで'c 'を持っています、MacOSののコピーバッファ

実際のコード

c() {} # you'll want this so that you don't get a command unrecognized error 

preexec() { 
    tmp=""; 
    if [ "${1:0:1}" = "c" ] && [ "${1:1:1}" = " " ] && [ "${1:2:1}" != " " ]; then         
    for ((i=2; i<${#1}; i++)); do 
     tmp="${tmp}${1:$i:1}"; 
    done 
    echo "$tmp" | pbcopy; 
    fi 
} 

先に行くと、あなたの.zshrcファイルで上記の2つの機能をスティック、またはあなたが好きな場所(私は私の.oh-my-zsh/customディレクトリ内のファイルに地雷を置きます)。

誰かがより洗練されたソリューションを持っている場合は、plzが話をします。 マウスを使用しないようにするには。私は私が探していますコマンド番号を見つけるためにhistoryを使用

0

、その後、私が実行します。システムの

echo "!command_number" | xclip -in 
関連する問題