Размер вкладки изменения команды “кошки”

С современными библиотеками шрифтов это легко. Лучший способ состоит в том, чтобы просто добраться .ttf файлы Вы хотите и отбрасываете их в ~/.fonts в Вашем корневом каталоге. (Если это не существует, создайте его.)

Затем они должны быть доступны Вашим приложениям. Это в расчете на пользователя, а не в масштабе всей системы (который Вы получаете с msttcorefonts пакет), но имеет некоторые преимущества — Вы не должны создавать об/мин, со своей стороны, и во-вторых при сохранении корневого каталога, когда Вы обновите до Fedora 16, они все еще будут там и все еще просто работать.

15
27.02.2012, 16:28
8 ответов

Первая команда здесь эмулирует форматирование, Вы видите в vim. Это разумно разворачивает вкладки до эквивалентного количества пробелов, на основе ПОЗИЦИИ ТАБУЛЯЦИИ (ts) установка каждых 4 столбцов.

printf "ab\tcd\tde\n" |expand -t4   

Вывод

ab  cd  de

Чтобы сохранить вкладки как вкладки и установить положения позиции табуляции на каждый 4-й столбец, затем необходимо изменить способ, которым среда работает с символом вкладки (как энергия делает с :set ts=4 команда)

Например, в терминале, можно установить позицию табуляции на 4 с этой командой;

tabs 4; printf "ab\tcd\tde\n" 

Вывод

ab  cd  de
21
27.01.2020, 19:49
  • 1
    , хорошим для знания (1). expand (от coreutils пакета) и tabs (от ncurses пакета) команда, (2). и значение ts является [T]ab [S] вершиной –  LiuYan 刘研 12.03.2013, 10:37

Нет никакого понятия вкладок или позиций табуляции в cat; программа просто направляет исходные данные к выводу и рассматривает вкладки как любой другой символ. Если устройство вывода, окажется, будет терминалом, то вкладки будут обработаны согласно любому поведению, которое терминал настроен для обеспечения.

Системам реализовывая POSIX.1 назвали команду tabs(1) это скорректирует понятие терминала того, как должны быть отображены вкладки. В зависимости от конкретной вкладки расположение не считается хорошей идеей, поскольку кто-то может отправить, Ваш файл к некоторому другому устройству, такому как принтер так не пойдет, что Вы предназначили.

Когда Вы корректируетесь ts в vim (или плоскость vi), все, что Вы делаете, корректируется, как редактор интерпретирует символы табуляции при отображении. Это не имеет никакого влияния, что заканчивается в файле.

9
27.01.2020, 19:49
  • 1
    Спасибо за объяснение. Как принтер настроен для обработки вкладок? –  Meysam 27.02.2012, 21:36
  • 2
    Большинство принтеров рассматривает их тот же путь, как большинство терминалов делает по умолчанию: левое поле и каждые восемь символов позже. –  Blrfl 27.02.2012, 21:59

Согласно странице справочника, кошка не может сделать этого самостоятельно. Но Вы можете, например, выполнять вывод от кошки через tr отфильтруйте для замены вкладок любым количеством пробелов, которых Вы желаете:

cat somefile | tr '\t' '  '

заменит символ табуляции двумя пробелами.

Обновление: как указано в комментариях к этому сообщению, это на самом деле не работает. Тем не менее, я сохраняю ответ как пример того, как не сделать это.

-2
27.01.2020, 19:49
  • 1
    Это на самом деле заменяет '\t' только с одним пространством, неважно, сколько пробелов является промежуточным вторая пара кавычек ' ' –  Meysam 27.02.2012, 16:52
  • 2
    tr не прокладывает себе путь.. каждым байтом аргумента 1 заменяет каждый соответствующий байт аргумента 2..... Поэтому printf '\t' |tr '\t' 'ळ' распечатывает единственный байт, шестнадцатеричное значение которого \xE0 .. то, которое является первым байтом трех UTF-8, закодировало байты, которые составляют символ (чье значение Unicode CodePoint является U+0933), А-ч –  Peter.O 27.02.2012, 16:59
  • 3
    , конечно. Спасибо за ловлю моей глупой ошибки! –  Petr Uzel 27.02.2012, 17:07

На основе вышеупомянутых ответов и примеров, казалось бы, что фактическая команда требуемый OP...

cat somefile | expand -t4

Это работает на меня на Red Hat 6.4.

5
27.01.2020, 19:49

Просто используйте следующий код:

tabs -n

Где n является количеством пробелов, Вы хотите, чтобы вкладки соответствовали также. Чтобы к не необходимости сделать этот каждый раз Вы запускаете оболочку, просто редактируете Ваш .bash_profile в ~/ и добавьте вышеупомянутую строку в конец файла.

Для дальнейшей информации о команде вкладок обратитесь к:

man tabs
10
27.01.2020, 19:49
  • 1
    Просто остерегайтесь этого, постоянно изменение Вашей ширины вкладок по умолчанию могло бы завинтить другие команды (например, ls помещенный может выглядеть не правильно выровненным). –  Gustavo Bezerra 02.02.2014, 16:58

В дополнение к уже данным ответам, expand может также принимать список позиций остановок табуляции. Это полезно, если длина содержимого разных столбцов сильно различается.

Я столкнулся с этим требованием сегодня, когда хотел сделать вывод шифров openssl более читабельным:

$ openssl ciphers -v 'HIGH'|tr -s ' ' '\t'|expand -t31,41,57,70,90
ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2   Kx=ECDH         Au=RSA       Enc=AESGCM(256)     Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2   Kx=ECDH         Au=ECDSA     Enc=AESGCM(256)     Mac=AEAD
ECDHE-RSA-AES256-SHA384        TLSv1.2   Kx=ECDH         Au=RSA       Enc=AES(256)        Mac=SHA384
ECDHE-ECDSA-AES256-SHA384      TLSv1.2   Kx=ECDH         Au=ECDSA     Enc=AES(256)        Mac=SHA384
...
ECDH-ECDSA-AES128-SHA          SSLv3     Kx=ECDH/ECDSA   Au=ECDH      Enc=AES(128)        Mac=SHA1
AES128-GCM-SHA256              TLSv1.2   Kx=RSA          Au=RSA       Enc=AESGCM(128)     Mac=AEAD
AES128-SHA256                  TLSv1.2   Kx=RSA          Au=RSA       Enc=AES(128)        Mac=SHA256
AES128-SHA                     SSLv3     Kx=RSA          Au=RSA       Enc=AES(128)        Mac=SHA1

CAMELLIA128-SHA                SSLv3     Kx=RSA          Au=RSA       Enc=Camellia(128)   Mac=SHA1
PSK-AES128-CBC-SHA             SSLv3     Kx=PSK          Au=PSK       Enc=AES(128)        Mac=SHA1

Использование только expand -t31 увеличит ширину вывода с примерно 100 символов до более чем 160 символов.

2
27.01.2020, 19:49

Многие терминалы поддерживают установку переменных позиций табуляции. Те, которые vt100, linux и / или поддерживают стандарт EMCA -48, большинство терминов в Linux поддерживают настройку размера вкладки :xterm и семейство (uxterm, urxvt )xfce4 -терминал, luit, терминал, SecureTTY и другие.

Итак, несколько лет назад я написал скрипт, чтобы установить для вкладок при входе в систему каждые 2 пробела --раньше использовалось 4, затем 3 на короткое время, а теперь 2....

Итак, теперь, если я 'cat' файл, вкладки в файле будут расширяться до настроек моего терминала.

Если я прошел через vim или более, они делают свое собственное расширение вкладок, но многие утилиты используют вкладки.

Сценарий будет включен сюда для справки или личного использования.:

#!/bin/bash  -u
#console_codes(4) man page... vt100/2 et && EMCA-48 standard
# (c) la walsh (2013) -- free to use and modify for personal use.
#                     -- optionally licenced under Gnu v3 license.

# v0.0.3    - try to reduce tabcols to minimal set to reproduce.
# v0.0.2    - set tabs for full terminal width (try to get term width)

shopt -s expand_aliases extglob
alias my=declare        
alias int='my -i'       array='my -a' intArray='my -ia'   string=my

my _Pt=$(type -t P)
[[ $_Pt && $_Pt == function ]] && unset -f P
alias P=printf
unset _Pt

P -v clrallts  "\x1b[3g"    #Clear All TabStops
P -v hts       "\033H"      #Horizontal TabStop
P -v cpr       "\x1b[6n"    #Current Position Report


getcols() {                 # try to read terminal width
  local sttyout="$(stty size </dev/tty)"
  int default_cols=80
  if [[ -n ${COLUMNS:-""} && $COLUMNS =~ ^[0-9]+$ ]]; then 
    default_cols=$COLUMNS; fi
  [[ -z ${sttyout:-""} ]] && { echo $default_cols; return 0; } 
  int cols="${sttyout#*\ }"
  echo -n $[cols<2?default_cols:cols]
  return 0
}

getpos () {
  string ans    wanted=${1:-xy}
  int attempt=0 max_attempt=1   # in case of rare failure case
                                # use 'attempt' value as additional
                                # time to wait for response
  while : ; do
    ( ( P "\x1b[6n" >/dev/tty) & 2>/dev/null )  
    read  -sd R -r -t $[2 + attempt] ans </dev/tty; 
    ans=${ans:2}; 
    int x=0-1 y=0-1
    if ! x="${ans#*;}" y="${ans%;*}" 2>/dev/null  || 
      ((x==-1||y==-1)); then
      ((attempt+=1 < max_attempt)) && continue
    fi
  break; done
  string out=""
  [[ $wanted =~ x ]] && out="$x"
  [[ $wanted =~ y ]] && out="${out:+$x }$y"
  [[ $out ]] && echo -n "$out"
}

declare -ia tabs


get_tabs () {
  P "\r"
  tabs=()
  int pos=0 oldpos=0-1
  while ((oldpos!=pos));do
    ((pos)) && tabs+=($pos)
    oldpos=pos
    P "\t"
    pos=$(getpos x)
  done
  P "\r"
  return 0
}

# Note: this func uses ability to _read_ tabstops as _proxy_ for setting them
# (i.e. it makes no sense to be able to read them if you can't set them)

test_tabset_ability () {
  string prompt="tty_tab:"
  int newcol=${#prompt}+1
  P "\r$prompt"
  int mycol=$(getpos x)
  ((mycol && mycol==newcol)) && return 0    ## return OK

  { P " Term tabset ability not detected mycol=${mycol:-''},"
    P " promptlen=$newcol)\n"; } >&2
  exit -1 
}

do_help_n_display_curtabs () {
  P " <n>   - set tab stop to N\r"
  intArray diffs;
  int last=1  cur i
  string eol=""
  get_tabs && {
    for ((i=0; i<${#tabs[@]}; ++i)); do
      cur=${tabs[i]}
      diffs[i]=cur-last
      last=cur
    done
    intArray reverse_tabs_set=()
    int prevtab=0-1
    for ((i=${#diffs[@]}-2; i>0; --i)); do
      int thistab=${diffs[i]}
      if ((thistab!= prevtab)) ;then 
        reverse_tabs_set+=($thistab)
        prevtab=thistab
      fi
    done
    P "current value: tty_tab "
      for ((i=${#reverse_tabs_set[@]}-1; i>=0; --i)); do
        P "%d " "${reverse_tabs_set[i]}"; done
    P "\r";
  }
  get_tabs  && {
    P "(from 1, tabs skip to column: "
    P "%s " "${tabs[@]}"
    P "\r\n"
  }
}

set_tabs () {
  int max_col=${1:=0-80}
  int tabstop=${2:-?"need a param for tabstop"}
  int tab=$tabstop        pos=0
  string str=""
  P $clrallts               ## reset old tabs
  while ((++pos<cols)) ;do  ## move across screen setting tabs
    str+=" "
    ((pos%tab)) || str+="$hts"
  done
  P "\r$str\r"
}


int cols=$(getcols)

test_tabset_ability         ## exits if no ability


if (($#==0)) ; then
  do_help_n_display_curtabs
  exit 1
else
  set_tabs "$cols" "$@"
fi

# vim: ts=2 sw=2

Надеюсь, это поможет...

0
27.01.2020, 19:49

Для эмуляторов терминала X (, например. $TERMэто xterm, stи т. д.):

$ tabs -N

Для виртуальных консолей (нет X-сервера, только текстовая консоль, где $TERMравно linuxи т. д.):

$ setterm --tegtabs N

Где N— целое число пробелов, используемых для TAB.

Sed way вместо tr, который переводит SET1в SET2символов в 1:1«пропорциях»:

$ sed 's/\t/    /g' FILENAME
           ^^^^^
        spaces here
2
20.09.2021, 02:49

Теги

Похожие вопросы