web-dev-qa-db-ja.com

X11のターミナルウィンドウ間でタブをコピーして貼り付ける

2つのターミナルウィンドウ間でX11マウス選択を使用してテキストをコピーして貼り付けると、タブがスペースに変換されることがよくありますが、常にそうとは限りません。これは、関連する端末アプリケーションとその内部で実行されているプログラムに依存しているようです。

これは私が実験によって見つけたものです:

  • これは、ソース(コピー)側で実行されているものにのみ依存します。ソースがタブを保持している場合、ターゲット(貼り付け)側は、実行中のタブに関係なくタブを貼り付けます。
  • ソース側のgnome-terminalのみがタブを保持します。 xtermkonsoleはしません。
  • タブは、ファイルがcatを使用して出力された場合にのみ保持されます。 lessvimemacs、またはnanoなどの他のアプリケーションは、タブを保持しません。

これの説明は何ですか?これらのバグはkonsolextermにありますか、それとも別の方法で構成できますか? lessなどは、出力のタブを保持するように構成できますか?

11

はい、あなたの観察は正しいです。コピー&ペーストすると、ターゲットがソースからデータを取得します。タブを表示するとき、xterm(およびkonsole)は、明らかに、タブ自体をスペースに変換します(ターミナル内で実行されているアプリケーションがまだそれを行っていない場合)。したがって、選択したテキストに対する要求が発生した場合、提供する必要があるのはスペースだけです。

何年も前のxterm-maintainerからの応答を漠然と覚えています。修正するのは非常に難しいだと主張しています...

よくわかりません、howgnome-terminalは正しいことをしますが、私は彼らがそうしてくれてうれしいです:)別の方法は、内部でgvimを実行する代わりに、vimvimのグラフィカルバージョン)を使用することですターミナルアプリケーション-タブを失うことなく、安全にコピーアンドペーストfrom gvimできます。

3
Mikhail T.

これは、特にタブを必要とする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.

あなたが気づいているのはバグではありません。 「それは特徴です。」唯一の問題は、それをオフにする方法を知る必要があるということです。

0
Sudo Bash