2つのターミナルウィンドウ間でX11マウス選択を使用してテキストをコピーして貼り付けると、タブがスペースに変換されることがよくありますが、常にそうとは限りません。これは、関連する端末アプリケーションとその内部で実行されているプログラムに依存しているようです。
これは私が実験によって見つけたものです:
gnome-terminal
のみがタブを保持します。 xterm
とkonsole
はしません。cat
を使用して出力された場合にのみ保持されます。 less
、vim
、emacs
、またはnano
などの他のアプリケーションは、タブを保持しません。これの説明は何ですか?これらのバグはkonsole
とxterm
にありますか、それとも別の方法で構成できますか? less
などは、出力のタブを保持するように構成できますか?
はい、あなたの観察は正しいです。コピー&ペーストすると、ターゲットがソースからデータを取得します。タブを表示するとき、xterm
(およびkonsole
)は、明らかに、タブ自体をスペースに変換します(ターミナル内で実行されているアプリケーションがまだそれを行っていない場合)。したがって、選択したテキストに対する要求が発生した場合、提供する必要があるのはスペースだけです。
何年も前のxterm-maintainerからの応答を漠然と覚えています。修正するのは非常に難しいだと主張しています...
よくわかりません、howgnome-terminal
は正しいことをしますが、私は彼らがそうしてくれてうれしいです:)別の方法は、内部でgvim
を実行する代わりに、vim
(vim
のグラフィカルバージョン)を使用することですターミナルアプリケーション-タブを失うことなく、安全にコピーアンドペーストfrom gvimできます。
これは、特にタブを必要とするMakefiles
の場合、問題になることがあります。残念ながら、さまざまなプログラムの問題は関係ありません。それぞれがおそらく非常に異なる解決策を持っているでしょう。
Vimの場合、:set noexpandtab
を実行するか、set noexpandtab
ファイルに~/.vimrc
を配置する必要があります。特定のファイルタイプのみにnoexpandtab
を設定したい場合は、~/.vimrc
で自動コマンドを実行できます。私の中には次のものがあります。
"indenting defaults: 4 spaces for an indent
set shiftwidth=4
set softtabstop=4
set expandtab
"exceptions to indenting for specific languages and files--------
"for Shell scripts: 2 spaces for an indent
autocmd filetype sh setlocal shiftwidth=2
autocmd filetype sh setlocal softtabstop=2
"for Makefiles: use tabs for indents
autocmd filetype make setlocal tabstop=8
autocmd filetype make setlocal noexpandtab
これにより、vim
のタブにデフォルトの4つのスペースが設定され、シェルスクリプトとMakefileの例外が作成されます。
less
のような他のプログラムについては、そこのmanページを見てみてください。構成ファイル、環境変数、または必要なコマンドラインオプションが含まれている場合があります。少ないマニュアルページを見る:
-xn,... or --tabs=n,...
Sets tab stops. If only one n is specified, tab stops are set
at multiples of n. If multiple values separated by commas are
specified, tab stops are set at those positions, and then con-
tinue with the same spacing as the last two. For example,
-x9,17 will set tabs at positions 9, 17, 25, 33, etc. The
default for n is 8.
あなたが気づいているのはバグではありません。 「それは特徴です。」唯一の問題は、それをオフにする方法を知る必要があるということです。