kopiuj i wklej zakładki między oknami terminala w X11

11

Kiedy kopiuję i wklejam tekst za pomocą myszy X11 między dwoma oknami terminala, tabulatory są często, ale nie zawsze, konwertowane na spacje. Wydaje się, że zależy to od zaangażowanych aplikacji terminalowych i działających w nich programów.

Oto, co odkryłem eksperymentalnie:

  • Zależy to wyłącznie od tego, co działa po stronie źródłowej (kopiującej). Strona docelowa (wklej) wklei karty bez względu na to, co jest uruchomione, jeśli źródło je zachowało.
  • Tylko gnome-terminalpo stronie źródłowej zachowane są zakładki. xtermi konsolenie.
  • Karty są zachowywane tylko wtedy, gdy plik został wydrukowany przy użyciu cat. Inne aplikacje, takie jak less, vim, emacs, lub nanonie zachowujące zakładkach.

Jakie jest tego wytłumaczenie? Czy są to błędy konsolei xtermczy można je skonfigurować inaczej? Czy można lesstak skonfigurować, aby zachować zakładki na wydruku?

Peter Eisentraut
źródło

Odpowiedzi:

3

Tak, twoja obserwacja jest poprawna. Po skopiowaniu i wklejeniu obiekt docelowy pobiera dane ze źródła. Podczas wyświetlania kart, xterm(i konsole) najwyraźniej tłumaczą je same na spacje (jeśli aplikacja działająca w terminalu jeszcze tego nie zrobiła). Tak więc, gdy przychodzi żądanie wybranego tekstu, jedyne, co mają do zaoferowania, to spacje.

Nawet niejasno pamiętam odpowiedź opiekuna xterma sprzed lat, mówiąc, że bardzo trudno byłoby to naprawić ...

Nie jestem pewien, jak gnome-terminal to zrobić, ale cieszę się, że tak :) Inną alternatywą jest użycie gvim(wersja graficzna vim) - zamiast uruchamiania vimw aplikacji terminalowej - możesz bezpiecznie skopiować i wkleić z gvim , bez utraty kart.

Michaił T.
źródło
0

Czasami może to stanowić problem, szczególnie w przypadku Makefileskart. Niestety problemy z różnymi programami nie są powiązane. Każdy będzie prawdopodobnie miał inne rozwiązanie.

Dla vima musisz wykonać a :set noexpandtablub umieścić set noexpandtabw swoim ~/.vimrcpliku. Jeśli chcesz noexpandtabustawić tylko niektóre typy plików , możesz wykonać polecenie automatyczne w twoim ~/.vimrcMam następujące w moim:

"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

Spowoduje to ustawienie domyślnych 4 spacji dla tabulacji vimi wyjątki dla skryptów powłoki i plików Makefiles.

W przypadku innych programów, takich jak less, spróbuj spojrzeć na tam strony man. Mogą mieć pliki konfiguracyjne, zmienne środowiskowe lub opcje wiersza polecenia dla potrzeb. Patrząc na stronę man mniej:

-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.

To, co zauważasz, nie jest błędem. „To cecha”. Jedynym problemem jest to, że musisz wiedzieć, jak to wyłączyć.

Sudo Bash
źródło
2
less -xnkonfiguruje go, aby używał n spacji zamiast znaku tabulacji. -Upowoduje wyświetlenie karty jako ^I. Nie znalazłem sposobu, aby emitował literalny znak tabulacji, więc skopiowanie tekstu spowoduje wklejenie znaku tabulacji, ale chciałbym wiedzieć, jak to zrobić.
Matt McClure,
Warto zauważyć, że w Roff ( troff& nroff) tabstopsy można ustawiać niezależnie od siebie, podobnie jak paski narzędzi „linijki” we współczesnych edytorach tekstu (OpenOffice, Microsoft Word i in.). Strony podręczne rzadko jednak używają niestandardowych tabulatorów w praktyce.
mandoc(1)pozwala również użytkownikom przesłonić domyślną szerokość wcięcia z wiersza poleceń, używając -O indent=N(domyślnie 5 kolumn).