"ক্যাট" কমান্ডের ট্যাব আকার পরিবর্তন করুন


15

আমি যখন থাকি আমি vimনীচের কমান্ড দিয়ে ট্যাব আকার পরিবর্তন করতে পারি:

:set ts=4

catকমান্ড আউটপুটটির জন্যও ট্যাব আকার নির্ধারণ করা সম্ভব ?

উত্তর:


21

এখানে প্রথম কমান্ডটি আপনি যে বিন্যাসটি দেখছেন তা অনুকরণ করে vim। এটি প্রতি 4 কলামের একটি ট্যাব-স্টপ (টিএস) সেটিংয়ের উপর ভিত্তি করে বুদ্ধিমানের সাথে জায়গাগুলির সমমানের সংখ্যায় ট্যাবগুলি প্রসারিত করে।

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

আউটপুট

ab  cd  de

রাখার জন্য ট্যাব হিসাবে ট্যাব ট্যাবে আছে বন্ধ যে 4 র্থ কলামে সেট অবস্থানের, তাহলে আপনি পথ পরিবর্তন করতে হবে একটি ট্যাব-অক্ষর সঙ্গে পরিবেশ কাজ (তেজ কিছু করে ঠিক যেমন :set ts=4কমান্ড)

উদাহরণস্বরূপ, টার্মিনালে আপনি এই কমান্ডটি দিয়ে ট্যাবটি STOP 4 এ সেট করতে পারেন ;

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

আউটপুট

ab  cd  de

জানা ভাল (1)। expand(কোর্টিলস প্যাকেজ থেকে) এবং tabs(এনক্রোস প্যাকেজ থেকে) কমান্ড, (২)। এবং টিএস এর অর্থ [ টি ] আব [ এস ] শীর্ষ
লিউইয়ান 研 研

10

কেবলমাত্র নিম্নলিখিত কোডটি ব্যবহার করুন:

tabs -n

যেখানে n হ'ল ফাঁকের সংখ্যা যেখানে আপনি ট্যাবগুলিকেও অনুরূপ করতে চান। এই প্রত্যেক সময় আপনি শেল, আপনার শুধু সম্পাদনা শুরু করতে হচ্ছে না জন্য .bash_profileমধ্যে ~/এবং ফাইল শেষে উপরের লাইনটি যোগ করুন।

ট্যাব কমান্ড সম্পর্কে আরও তথ্যের জন্য, দেখুন:

man tabs

2
কেবল সতর্ক থাকুন যে স্থায়ীভাবে আপনার ডিফল্ট ট্যাবগুলির প্রস্থটি পরিবর্তন করা অন্যান্য কমান্ডগুলি স্ক্রু করতে পারে (উদাহরণস্বরূপ lsপুটটি সঠিকভাবে প্রান্তিক না দেখায়)।
গুস্তাভো বেজারেরা

9

এখানে ট্যাব বা ট্যাব থামার কোনও ধারণা নেই cat; প্রোগ্রামটি কেবলমাত্র আউটপুটটির ইনপুটগুলিকে ফ্যানেল করে এবং অন্য কোনও চরিত্রের মতো ট্যাবগুলির সাথে আচরণ করে। যদি আউটপুট ডিভাইসটি টার্মিনাল হিসাবে দেখা দেয়, টার্মিনালটি যে আচরণ হিসাবে কনফিগার করা হয়েছে তা অনুযায়ী হ্যান্ডেল করা হবে।

POSIX.1 প্রয়োগকারী সিস্টেমগুলির একটি কমান্ড রয়েছে যা tabs(1)ট্যাবগুলি কীভাবে প্রদর্শিত হবে সে সম্পর্কে টার্মিনালের ধারণাটি সামঞ্জস্য করবে। কোনও নির্দিষ্ট ট্যাব বিন্যাসের উপর নির্ভর করে কোনও ভাল ধারণা হিসাবে বিবেচনা করা হয় না, কারণ কেউ আপনার ফাইলটি অন্য কোনও ডিভাইসে যেমন একটি প্রিন্টারে প্রেরণ করতে পারে যা আপনার ইচ্ছা অনুযায়ী কাজ করে না।

আপনি যখন (বা প্লেইন ) সামঞ্জস্য tsকরেন, তখন আপনি যা করছেন তা হ'ল সম্পাদকটি প্রদর্শিত ট্যাব অক্ষরকে কীভাবে ব্যাখ্যা করে। ফাইলটিতে কী শেষ হবে তার কোনও প্রভাব নেই।vimvi


ব্যাখ্যার জন্য ধন্যবাদ। ট্যাবগুলি চিকিত্সার জন্য প্রিন্টারটি কীভাবে কনফিগার করা হয়?
মাইসাম

বেশিরভাগ মুদ্রকগুলি সেগুলি একইভাবে আচরণ করে যেমন বেশিরভাগ টার্মিনালগুলি ডিফল্টরূপে করে: বাম মার্জিন এবং প্রতি আটটি অক্ষর পরে।
blrfl

5

উপরের উত্তর এবং উদাহরণগুলির উপর ভিত্তি করে মনে হবে যে আসল কমান্ডটি ওপি চেয়েছিল ...

cat somefile | expand -t4

এটি রেড হ্যাট 6.4 এ আমার জন্য কাজ করে।


2

ইতিমধ্যে প্রদত্ত উত্তরে প্রসারিত expandকরতে, ট্যাব স্টপ অবস্থানগুলির একটি তালিকাও নিতে পারে। যদি বৈকল্পিক কলামগুলির সামগ্রীর দৈর্ঘ্যের পরিমাণ অনেক বেশি হয় তবে এটি কার্যকর।

আমি আজ এই প্রয়োজনটি পেরিয়ে এসেছি যখন আমি আউটপুটটিকে openssl ciphersআরও পাঠযোগ্য করে তুলতে চাই :

$ 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 টিরও বেশি অক্ষরে ফুরিয়ে যায়।


1
এটি করার একটি সহজ উপায় হ'ল column:openssl ciphers -v 'HIGH' | column -t
মুরু

0

অনেক টার্মিনাল ভেরিয়েবল ট্যাব স্টপ সেট করে support যেগুলি ভিটি 100, লিনাক্স এবং ইএমসিএ-48 স্ট্যান্ডার্ড সমর্থন করে, বেশিরভাগ শর্ত লিনাক্স সমর্থন সেটিংস ট্যাব আকারের ক্ষেত্রে: xterm এবং পরিবার (uxterm, urxvt) xfce4- টার্মিনাল, লুইট, টার্মিনাল, SecureTTY, অন্যদের মধ্যে।

তাই প্রতি 2 টি স্পেসে লগইন করতে আমার ট্যাবগুলি সেট করতে কয়েক বছর আগে একটি স্ক্রিপ্ট লিখেছিল - 4, তারপরে অল্প সময়ের জন্য 3 এবং এখন 2 এ ব্যবহৃত হয় ...

সুতরাং এখন, আমি যদি একটি ফাইল 'ক্যাট' করি তবে ফাইলের ট্যাবগুলি আমার টার্মিনালের সেটিংসে প্রসারিত হবে।

আমি যদি ভিএম বা আরও বেশি কিছু পেতে পারি তবে তারা তাদের নিজস্ব ট্যাব সম্প্রসারণ করে তবে প্রচুর ব্যবহারের ট্যাব ব্যবহার করে।

এখানে স্ক্রিপ্টটি উল্লেখ এবং ব্যক্তিগত ব্যবহারের জন্য অন্তর্ভুক্ত করবে:

#!/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

আশা করি এটা সাহায্য করবে...


-2

ম্যানপেজ অনুযায়ী, বিড়াল নিজে থেকে এটি করতে পারে না। তবে আপনি উদাহরণস্বরূপ trট্যাবগুলি যে কোনও সংখ্যক স্পেসের সাথে প্রতিস্থাপন করতে ফিল্টারের মাধ্যমে বিড়াল থেকে আউটপুট চালাতে পারেন :

cat somefile | tr '\t' '  '

দুটি স্পেস দিয়ে ট্যাব চরিত্রটি প্রতিস্থাপন করবে।

আপডেট: এই পোস্টে মন্তব্যগুলিতে নির্দেশিত হিসাবে, এটি আসলে কাজ করে না । তবুও, উত্তরটি এটি কীভাবে না করা যায় তার উদাহরণ হিসাবে রাখছি ।


3
এটি '\t'কেবলমাত্র একটি জায়গার সাথে প্রতিস্থাপন করছে, দ্বিতীয় জোড়ের উদ্ধৃতিগুলির মধ্যে কত স্পেস রয়েছে তা বিবেচনা না করে' '
মাইসাম

3
trসেভাবে কাজ করে না .. আর্গ 1 এর প্রতিটি বাইট প্রতিটি তর্ক 2 এর সাথে সম্পর্কিত বাইট দ্বারা প্রতিস্থাপিত হয় ..... সুতরাং printf '\t' |tr '\t' 'ळ' যার একক বাইট মুদ্রিত হয় যার হেক্স মান হয় \xE0.. যা তিনটি ইউটিএফ -8 এর প্রথম বাইট এনকোডেড বাইটগুলি যা চরিত্রটি তৈরি করে (যার ইউনিকোড কোডপয়েন্টের মান U + 0933)
পিটার.ও

আহ, অবশ্যই আমার নির্বোধ ভুল ধরার জন্য ধন্যবাদ!
পেটর উজেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.