端末ウィンドウにタブ文字を出力する

端末ウィンドウにタブ文字を出力する

ターミナルウィンドウにタブ文字(ASCII hex 0x09)をどのように出力しますか?

すべての実験では、タブ文字は端末に表示されると空白に変わります。例えば

$ echo -e "xx\t\tyy"
xx              yy

xxyyとの間のスペースは2つのタブではなく14のスペースで埋められているので、これは私が望むものではありません。stty tab0、、、、stty tab1stty tab2試しましたがstty tab3、すべて同じ結果を得ました。

私はGNOME Terminal 2.16.0とRed Hat Enterprise Linuxクライアントバージョン5.9を使用しています。

背景:端末でマウスでテキストを選択してExcelに貼り付けたいです。 Emacs(フィールド間に0x09タブを使用)でこれを行うと、フィールドは別の列に表示されます。私はこれが好きで、端末からコピーして貼り付けるときに同じ動作が欲しいです。ただし、現在のすべてのフィールドは最初の列の文字列で終わります。 Emacsのフィールド間にスペース(0x20)がある場合は、端末からコピーして貼り付けるのと同じ動作をします。

答え1

タブ文字は印刷可能文字ではありません。 Tabは通常、カーソルを前に移動させる制御文字です(ただし、行の終わりではありません)。スキップされた文字は変更されません。

gnome-terminal(およびvteそれに基づく他のエミュレータには)コピー - 貼り付けるためにタブを保存しようとする特別なトリックがありますが、ソフトラップではまだタブが失われます。他のエミュレータにもこれらのハッキング機能があるかもしれませんが、通常はそうではありません。

会話も参照してくださいhttps://bugzilla.gnome.org/show_bug.cgi?id=769316

答え2

使用する場合

printf "xx\t\tyy"

実際のタブ文字に展開する必要があります。echoAboutの行動はbash奇妙でした。 Debian 7でテストした結果、タブbashもタブecho -tも提供されませんでしたが、タブは提供されました(確認のために出力をファイルにリダイレクトしました)。スクリプトは次のとおりです。/bin/echo -tprintf

#!/bin/bash
echo -t "xx\t\tyy"
echo done
/bin/echo -t "xx\t\tyy"
echo done
echo "xx\t\tyy"
echo done
/bin/echo "xx\t\tyy"
echo done
printf "xx\t\tyy"
echo done

そして出力到着端末:

-t xx\t\tyy
done
-t xx\t\tyy
done
xx\t\tyy
done
xx\t\tyy
done
xx              yydone

これはキャラクター配置の追加問題とは異なります。存在する端末画面。通常、ほとんどの端末ではスペース切り取り/貼り付けオプション(印刷されたラベルを含めるか除く)そのため -

答え3

トピックから少しずれていますが、出力をクリップボードに入れてExcelに貼り付けたい場合は、xclipなどのツールを試してみてください。インストールする必要があります。 xclipを使用すると、次の内容を作成できます。

echo -e "xx\t\tyy" | xclip -selection c

これでクリップボードに保存され、Excelに貼り付けることができます。 echoが機能しない場合は、printfを試してみてください。

毎回すべての内容を入力したくない場合は、エイリアスを作成できます。

alias xclip="xclip -selection c"
echo -e "xx\t\tyy" | xclip

他の方法がない場合は、いつでも必要な出力をファイルにリダイレクトしてからテキストエディタで開き、必要な内容をコピーできます。タブはファイル内のタブとして保持する必要があるためです。

echo -e "xx\t\tyy" > tmpfile.txt

関連情報