คุณทำการปรับแต่งอะไรบ้างในโปรไฟล์เชลล์เพื่อเพิ่มประสิทธิภาพ


25

ฉันรู้ว่าบางคนมีสคริปต์เริ่มต้นและบางคนปรับเปลี่ยนข้อความในแบบของฉัน นักพัฒนาซอฟต์แวร์รายหนึ่งใช้นามแฝงสั้น ๆ สำหรับเส้นทางที่ยาวที่เขามักเข้าชมและคำสั่งที่ใช้บ่อย

การปรับแต่งที่มีประสิทธิภาพทั้งหมดที่คุณทำในโปรไฟล์ UNIX ของคุณคืออะไรเพื่อเพิ่มประสิทธิภาพและความสะดวกในการใช้งาน?


ควรเป็น CW ไม่สามารถตอบอย่างเป็นกลาง
akira

ฉันเห็นด้วย. อย่างไรก็ตามไม่มีตัวเลือกสำหรับ CW :-(
San

@akira @Michael ฉันต้องเผชิญกับสถานการณ์นี้บ่อยครั้ง มันจะดีถ้าผู้ดูแลสามารถแก้ไข / ข้ามโพสต์ / เปลี่ยนเส้นทางคำถาม เนื่องจากความคิดเห็นที่คุณปล่อยไว้ไม่ได้ช่วยผู้ใช้มากนักเพื่อให้ได้สิ่งที่ต้องการจริงๆ ไม่มีความผิดเพียงแค่ข้อเสนอแนะ หวังว่าคุณจะเข้าใจ.
San

หากคุณต้องการสร้างวิกิชุมชนคำถามให้ตั้งค่าสถานะเพื่อให้ผู้ดูแลสนใจ ดูวิกิพีเดียชุมชนคำถามที่พบบ่อย
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


11

.vimrc

บันทึกไฟล์ด้วยการอนุญาตรูทโดยพิมพ์w!!:

cmap w!! w !sudo tee % > /dev/null


.bashrc

อย่ากังวลกับอุปกรณ์หรือไฟล์ไบนารีเมื่อgrepไอเอ็นจี:

alias grep='grep --color=auto --binary-files=without-match --devices=skip'


แชร์รหัสบนเว็บ (เช่น pastebin แต่ง่ายกว่า) โดย cat 1337.sh | webshare

alias webshare='curl -F "sprunge=<-" http://sprunge.us | xclip'

มันให้URL สั้น ๆในคลิปบอร์ดของคุณ คุณสามารถต่อท้าย?whatever-langURL ที่ส่งคืนเพื่อให้มีการเน้นไวยากรณ์และบรรทัดที่มีหมายเลข


.inputrc

ใช้โหมด vi ในทุกสิ่งที่ใช้ไลบรารี readline (หลายโปรแกรม):

set editing-mode vi
set keymap vi

เคล็ดลับที่ยอดเยี่ยมที่ฉันไม่เคยรู้
San

7

สร้างไดเรกทอรีและ cd ในคำสั่งเดียว

ส่วนใหญ่เวลาที่ฉันทำคำสั่งต่อไปของฉันคือmkdircd <that dir>

วิธีนี้ช่วยประหยัดการพิมพ์บางอย่าง:

# make a directory and cd to it
mcd()
{
    test -d "$1" || mkdir "$1" && cd "$1"
}

ตัวอย่างเช่น:

/home/mikel$ mcd somedir
/home/mikel/somedir$ 

อีกสิ่งหนึ่งที่ฉันพบว่ามีประโยชน์คือวิธีที่ง่ายในการทำไดเรคทอรีทิ้ง เช่นถ้าฉันกำลังรวบรวมโปรแกรมหรือแม้ว่าฉันพยายามที่จะทำให้เกิดปัญหาในเว็บไซต์นี้ บางครั้งฉันอาจลืมล้างไดเรกทอรี

# make a temporary directory and cd to it
mtd()
{
    local dir
    dir=$(mktemp -d)
    if test -n "$dir"
    then
        if test -d "$dir"
        then
            echo "$dir"
            cd "$dir"
        else
            echo "mktemp directory $dir does not exist"
        fi
    else
        echo "mktemp didn't work"
    fi
}

แสดงว่าทำงานได้:

/home/mikel$ mtd
/tmp/tmp.wsnZjJ2KN6
/tmp/tmp.wsnZjJ2KN6$ 

ฉันใช้ระบบการทำความสะอาด/tmpหลังจากรีบูต แต่มันเป็นไปได้ที่จะปรับปรุงสิ่งนี้เช่นทำให้มันลบ temp dir หลังจากออกจากเชลล์


ฉันชอบตัวเลือก mcd ขอขอบคุณ
San

+1 ฉันใช้เวอร์ชันของฉันmcdมาหลายปีแล้วและกำลังจะเพิ่มสิ่งที่ชอบmtdในไม่ช้า
maaartinus

mtd() { mcd $TMP/`date +%y%m%d-%H%M%S-%N`; }ผมกำหนดไว้ของฉัน อาจขาดการพกพา แต่ก็ดีพอสำหรับฉัน
maaartinus

4

ฉันต้องการให้ bash พรอมต์แสดงรหัสทางออกของคำสั่งก่อนหน้าหากไม่ใช่ศูนย์ ฉันชอบเปลือกของฉันเพื่อเป็นกำลังใจให้ฉันเมื่อฉันใช้มันดังนั้นฉันจึงเพิ่มความบ้าบิ่น:

smiley() {
    RC=$?
    [[ ${RC} == 0 ]] && echo ':)' || echo ":( ${RC}"
}

export PS1="\$(smiley) \h [\A] [\W] \$ "

ดังนั้นเมื่อฉันเรียกใช้คำสั่งฉันได้รับคำติชมที่ดี

:) mycomputer [23:03] [~] $ sh -c 'exit 0'
:) mycomputer [23:03] [~] $ sh -c 'exit 11'
:( 11 mycomputer [23:03] [~] $ 

แก้ไข : นี่คือสิ่งที่ฉันใส่ใน ~ / .bashrc


น่าสนใจทีเดียว แต่ฉันมีข้อสงสัย รหัสควรอยู่ที่ไหน
San

ใน.bashrcสันนิษฐานว่า
มิเคล

ใช่นั่นคือใน ~ / .bashrc ของฉัน
jsbillings

จะพยายามว่า ..
ซาน

4

ขึ้น N

ข้ามไดเรกทอรี N ขึ้นในแผนผังไดเรกทอรี

แทนที่จะพิมพ์

cd ../../../..

คุณแค่พิมพ์

up 4

และ

cd -    

จะนำคุณกลับมา

ใส่ฟังก์ชั่นลงใน. bashrc ของคุณเพื่อใช้งาน

# (c) 2007 stefan w. GPLv3          
function up {
ups=""
for i in $(seq 1 $1)
do
        ups=$ups"../"
done
cd $ups
}

ว้าว .. ว่าเป็นความคิดที่ดี ..
ซาน

2

.zshrc:

alias l='ls -CF'
alias ll='ls -ClhF'
alias la='ls -CaF'
alias lla='ls -CalhF'
alias l.='ls -CAF --ignore=\*'
alias ll.='ls -CAlhF --ignore=\*'
alias t='tree -C'

PS1=$'%{\e[0;33m%}%m %{\e[32;1m%}%~ %{\e[0;31m%}%#%{\e[m%} '

bindkey '^[[3~' delete-char

export GREP_OPTIONS="--color"

.xmodmaprc:

clear lock
keycode 9 = Caps_Lock ISO_Next_Group Caps_Lock ISO_Next_Group
keycode 66 = Escape NoSymbol Escape
add lock = Caps_Lock

(ปุ่มสลับสำหรับ Escape และ Caps Lock)


+1 สำหรับการแมปคีย์ใหม่ Caps Lock ของฉันถูกแมปไปที่ Return ใครต้องการ Caps Lock LOCK ต่อไปหรือไม่
กระดิก

1
ฉันเป็นผู้ใช้ที่เป็นกลุ่ม เป็นเรื่องปกติสำหรับผู้ใช้ที่เป็นกลุ่มในการทำแผนที่ Escape to Caps Lock ผู้ใช้ Emacs มักจะแมปการควบคุมเพื่อ Caps Lock
polemon

1

ฉันยุ่งกับ bashrc ของฉันตั้งแต่ฉันใช้ terminal มาก (มันทำให้ฉันเรียนรู้ได้อย่างรวดเร็วและเรียนรู้สิ่งที่น่าสนใจที่จะใช้เช่นเดียวกับเครื่องมือที่น่าสนใจ) ฉันมักจะกำหนดฟังก์ชั่นมากมายใน bashrc ของฉัน ตัวอย่าง:

แยกคลังข้อมูล:

extract () {
libextract () {
if [ -f "$1" ] ; then
  case "$1" in
    *.tar.bz2) tar xjf "$1" ;;
    *.tar.gz)  tar xzf "$1" ;;
    *.bz2) bunzip2 "$1" ;;
    *.rar) rar x "$1" ;;
    *.gz) gunzip "$1" ;;
    *.tar) tar xf "$1" ;;
    *.tbz2) tar xjf "$1" ;;
    *.tgz) tar xzf "$1" ;;
    *.zip) unzip "$1" ;;
    *.Z) uncompress "$1" ;;
    *.7z) 7z x "$1" ;;
    *) echo "$1 ne moze biti raspakovan!" ;;
  esac
else
  echo "$1 nije validan fajl"
fi
}
 echo "Unesite putanju do direktorijuma u kome se nalaze arhive: " && read dir && dirprovera && cd $dir
  for f in *
    do
      mkdir ./$f-raspakovano && cd ./$f-raspakovano
      libextract ./../$f
      cd ./../
    done
  tipka
}

เปลี่ยนชื่อไฟล์และโฟลเดอร์:

frename () {
if [ $# -gt 0 ]
then
 dir="$(echo $1)"
  dirprovera
  cd $dir
  for f in *
    do
      mv "$f" "`echo "$f" | tr -s " " "_" | tr "A-Z" "a-z"`" 2>/dev/null &
    done
  tipka
else
 echo "Upotreba: frename [direktorijum]" >&2
fi
}

และเช่นนี้สำหรับการแบ่งไฟล์ขนาดใหญ่เป็นไฟล์ย่อย ๆ :

fsplit () {
if [ $# -gt 1 ]
then
 file="$(echo $1)"
 SIZE="$(echo $2)"
 PREFIX="$(echo $3)"
 if [ -z "$PREFIX" ]; then PREFIX="fsplit"; fi
  fileprovera
  split -d -a 3 -b $SIZE $file "$PREFIX-part-" || echo "Doslo je do greske!"
  tipka
else
 echo "Upotreba: fsplit [fajl] [velicina] [prefix]
Za velicinu se koriste m (MB), g (GB) ili k (KB) (15m, 650kb, 4.7g...)

Prefiks moze sadrzati brojeve, slova, i crtice (primer: moj_pre-fiks)
Ukoliko ne unesete prefiks isti ce biti dodeljen automatski u sledecem formatu:
  fsplit-part-XXX
gde XXX predstavlja broj dela fajla (001, 005, 189...)" >&2
fi
}

นอกจากนี้ฉันได้แก้ไขนามแฝงจำนวนมากเนื่องจากฉันพบว่าการใช้คำสั่งเดียวโดยมีอาร์กิวเมนต์เป็นเรื่องง่ายกว่าในบางกรณี (เช่นในคำสั่ง ls, grep และคำสั่งเล็ก) จากนั้นพิมพ์ทุกอย่างลงทุกครั้ง


1

(Wiki ชุมชนเพื่อให้แต่ละเคล็ดลับอยู่ในคำตอบที่แยกต่างหาก)

ออกจากระบบอย่างปลอดภัย

Ctrl+ Dเป็นวิธีที่ง่ายที่สุดในการออกจากเชลล์ แต่ถ้าคุณยังมีงานที่เปิดอยู่มันจะออกจากเชลล์อย่างมีความสุขอยู่ดี โดยค่าเริ่มต้นนี่หมายถึงโปรแกรมทั้งหมดที่คุณเรียกใช้จากภายในเชลล์นั้นจะถูกฆ่า

เชลล์บางตัวจะให้คุณออกจากระบบหลังจากกดCtrl+ Dสองครั้ง แต่มันก็ง่ายเกินไปที่จะทำโดยไม่ตั้งใจ

ดังนั้นให้เพิ่มสิ่งนี้ลงใน.bashrcหรือ.zshrcหรือไฟล์ปรับแต่งที่คุณต้องการ

alias x='_exit'

# prevent running "exit" if the user is still running jobs in the background
# the user is expected to close the jobs or disown them
_exit()
{
    case $- in *m*)
        # this way works in bash and zsh
        jobs | wc -l | grep -q '^ *0 *$'
        if test $? -eq 0
        then
            command exit "$@"
        else
            jobs
        fi
        ;;
    *)
        command exit "$@"
        ;;
    esac
}

1

(Wiki ชุมชนเพื่อให้แต่ละเคล็ดลับอยู่ในคำตอบที่แยกต่างหาก)

ค้นหาประวัติของคุณสำหรับทุกวิธีที่คุณเรียกใช้คำสั่ง

คุณอาจรู้เกี่ยวกับCtrl+ Rแล้ว แต่วิธีนี้ราบรื่นกว่า IMHO มาก

ตั้งค่าAlt+ Pเพื่อค้นหาคำสั่งที่ขึ้นต้นด้วยสิ่งที่คุณพิมพ์แล้ว

เช่นls Alt+ P, Alt+ P, Alt+ P จะค้นหาย้อนหลังผ่านlsคำสั่งทั้งหมดของคุณ

คุณต้องใส่สิ่งนี้ในของคุณ/etc/inputrcหรือ.inputrcสำหรับbash:

$if mode=emacs
"\ep": history-search-backward
"\en": history-search-forward
$endif

และสิ่งนี้ในของคุณ.zshrcสำหรับzsh:

bindkey -M emacs '^[p' history-beginning-search-backward
bindkey -M emacs '^[n' history-beginning-search-forward

คุณสามารถก้าวต่อไปอีกขั้นหนึ่งและทำให้ลูกศรขึ้นทำสิ่งนี้ได้


1

เครื่องคิดเลขง่าย ๆ

คุณสามารถใช้$(( ... ))หรือexpr ...ทำการคำนวณขั้นพื้นฐานมาก ๆ แต่ก็เป็นการหารจำนวนเต็มเช่น

$ expr 3 / 2
1

$ expr 1.5 \* 2
expr: non-integer argument

bcวิธีที่ดีกว่าคือการใช้งาน

# do some floating point arithmetic
calc()
{
    echo "scale=3; $*" | bc
}

แล้ว:

$ calc 3 / 2
1.500
$ calc 1.5 \* 2
3.0

1
เครื่องคิดเลขของฉันคือalias py='PYTHONSTARTUP=~/.pythonstartup python'มีfrom math import *;ในแฟ้มที่ ปัญหาการหารจำนวนเต็มยังคงไม่ได้รับการแก้ไข แต่มันใช้งานได้สะดวกกว่าสำหรับการดำเนินการที่ซับซ้อนมากขึ้น
maaartinus

1

แท็บเสร็จสมบูรณ์ดีกว่า

ฉันไม่คิดว่ามีใครพูดถึงการปรับแต่งTabเสร็จ

นี่คือสิ่งที่ฉันมี

สองสิ่งที่สำคัญคือ:

  • แต่ละคำสั่งจะแท็บเสร็จสมบูรณ์ขึ้นอยู่กับสิ่งที่คำสั่งคาดหวัง
    เช่นcd <Tab>จะแนะนำเฉพาะไดเรกทอรี
  • ไม่สนใจเคส
    เช่นd<Tab>จะยังคงสมบูรณ์DesktopและDownloads

สำหรับทุบตี:

# custom tab completions
if type complete >/dev/null 2>&1
then
    if complete -o >/dev/null 2>&1
    then
        COMPDEF="-o complete"
    else
        COMPDEF="-o default"
    fi
    complete -a alias unalias
    complete -d cd pushd popd pd po
    complete $COMPDEF -g chgrp 2>/dev/null
    complete $COMPDEF -u chown
    complete -j fg
    complete -j kill
    complete $COMPDEF -c command
    complete $COMPDEF -c exec
    complete $COMPDEF -c man
    complete -e printenv
    complete -G "*.java" javac
    complete -F complete_runner -o nospace -o default nohup 2>/dev/null
    complete -F complete_runner -o nospace -o default sudo 2>/dev/null
    complete -F complete_services service
    # completion function for commands such as sudo that take a
    # command as the first argument but should complete the second
    # argument as if it was the first
    complete_runner()
    {
        # completing the command name
        # $1 = sudo
        # $3 = sudo
        # $2 = partial command (or complete command but no space was typed)
        if test "$1" = "$3"
        then
            set -- `compgen -c "$2"`
        # completing other arguments
        else
            # $1 = sudo
            # $3 = command after sudo (i.e. second word)
            # $2 = arguments to command
            # use the custom completion as printed by complete -p,
            # fall back to filename/bashdefault
            local comps
            comps=`complete -p "$3" 2>/dev/null`
            # "complete -o default -c man" => "-o default -c"
            # "" => "-o bashdefault -f"
            comps=${comps#complete }
            comps=${comps% *}
            comps=${comps:--o bashdefault -f}
            set -- `compgen $comps "$2"`
        fi
        COMPREPLY=("$@")
    }

    # completion function for Red Hat service command
    complete_services()
    {
        OIFS="$IFS"
        IFS='
        '
        local i=0
        for file in $(find /etc/init.d/ -type f -name "$2*" -perm -u+rx)
        do
            file=${file##*/}
            COMPREPLY[$i]=$file
            i=$(($i + 1))
        done
        IFS="$OIFS"
    }
fi

สำหรับ zsh:

# set command completions
compctl -a {,un}alias
compctl -b bindkey
compctl -c command
compctl -/ {c,push,pop}d
compctl -E {print,set,unset}env
#compctl -c exec
compctl -f -x "c[-1,exec]" -c -- exec
compctl -j fg
# no -g according to zshcompctl
#compctl -g {ch}grp
compctl -j kill
compctl -c man
compctl -c nohup
compctl -u {ch}own
compctl -o {set,unset}opt
compctl -f -x "c[-1,sudo]" -c -- sudo
compctl -c {whence,where,which}
compctl -M '' 'm:{a-zA-Z}={A-Za-z}'

# make file name completion case-insensitive
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'

1

การบีบอัดที่ปลอดภัย

โปรแกรมบีบอัดจะลบไฟล์ดั้งเดิมตามค่าเริ่มต้น ฉันไม่ชอบสิ่งนั้น

alias gzip='gzip --keep'
alias bzip2='bzip2 --keep'
alias xz='xz --keep'
alias lzma='lzma --keep'

พรอมต์หลายสาย

tag() {
    TAG="${TAG} [$1]" exec zsh
}

reset_tags() {
    TAG='' exec zsh
}

color='green'
if [ "${USER}" = 'root' ]; then
    color='red'
fi

export PS1="${TAG} %B%F{yellow} *** %F{blue}%~\

%F{yellow}%(1j.[%j] .)%F{red}%(?..(%?%) )%F{${color}}%n@%m %F{blue}%# %f%b"
export RPS1='%B%F{blue}%D{%Y-%m-%d} %F{green}%D{%H:%M:%S}'
export PS2='%B%F{red}%n@%m%k %B%F{blue}%_> %b%f%k'
unset color
  • แสดงไดเรกทอรีปัจจุบันในบรรทัดแยกต่างหาก มีประโยชน์เมื่อจัดการทรีไดเรกทอรีลึกบนเทอร์มินัลคอลัมน์ 80
  • การมีนาฬิกาตรงมุมเป็นเรื่องที่ดีถ้าคุณใช้สภาพแวดล้อมแบบกราฟิก พรอมต์นี้แสดงเวลา น่าเสียดายที่คุณต้องกด Enter เพื่ออัปเดต
  • คุณสามารถแสดง "แท็ก" ด้วยตัวแปรสภาพแวดล้อม ตัวอย่าง:

    tag 'DONT SHTUDOWN!!'
    reset_tags
    
  • รหัสเป็นอย่างน้อยบางส่วนอยู่บนพื้นฐานนี้

การตั้งค่าประวัติ

dont_log() {
    HISTFILE="/dev/null" TAG="${TAG} %B%F{red}[LOGGING DISABLED]" zsh
}

if [ "${HISTFILE}" != '/dev/null' ]; then
    # history
    export HISTFILE="${HOME}/.zsh/history"
    export HISTSIZE="4096"
    export SAVEHIST="4096"

    # Don't overwrite, append!
    setopt APPEND_HISTORY

    # Write after each command
    # setopt INC_APPEND_HISTORY

    # Killer: share history between multiple shells
    setopt SHARE_HISTORY

    # If I type cd and then cd again, only save the last one
    setopt HIST_IGNORE_DUPS

    # Even if there are commands inbetween commands that are the same, still only save the last one
    setopt HIST_IGNORE_ALL_DUPS

    # Pretty    Obvious.  Right?
    setopt HIST_REDUCE_BLANKS

    # If a line starts with a space, don't save it.
    setopt HIST_IGNORE_SPACE
    setopt HIST_NO_STORE

    # When using a hist thing, make a newline show the change before executing it.
    setopt HIST_VERIFY

    # Save the time and how long a command ran
    setopt EXTENDED_HISTORY

    setopt HIST_SAVE_NO_DUPS
    setopt HIST_EXPIRE_DUPS_FIRST
    setopt HIST_FIND_NO_DUPS
fi
  • ขโมยลงคอจากที่นี่
  • ฉันเพิ่มการสนับสนุนสำหรับการปิดใช้งานการบันทึกอย่างชัดเจน มีประโยชน์ถ้าคุณกำลังจัดการกับโปรแกรมที่คาดว่ารหัสผ่านเป็นอาร์กิวเมนต์ CLI

0
  • bashrc : ฉันเป็นผู้ใช้ zsh ดังนั้นฉันมีสองสามบรรทัดใน bashrc ของฉันที่เริ่ม zsh หากมีอยู่ในระบบ
  • zshrc : แทนที่จะคัดลอก zshrc ของฉันจากสิ่งที่ชอบ grml (แม้ว่า zshrc นั้นค่อนข้างดีดังนั้นถ้าคุณไม่ต้องการที่จะม้วนตัวเองเป็นหนึ่งในดีที่สุด) ฉันเขียน zshrc ของตัวเอง
    • ฉันมีพรอมต์ที่กำหนดเอง เหนือสิ่งอื่นใดมันจะแสดงรหัสส่งคืนของคำสั่งสุดท้ายหากมันไม่เท่ากับ 0
    • ฉันมีนามแฝง เนื่องจากฉันมีบัญชีในเซิร์ฟเวอร์จำนวนมากบางครั้งฉันต้องทำการตรวจสอบเวอร์ชันของคำสั่งที่มีอยู่ในระบบและตั้งชื่อแทนตามลำดับ
    • ฉันตั้งค่าตัวแปร PATH ของฉัน
    • ฉันตั้งค่าตัวแปรสภาพแวดล้อมอื่น ๆ (ตัวอย่างเช่น $ EDITOR)
  • vimrc : ฉันเป็นผู้ใช้ที่เป็นกลุ่มดังนั้นฉันมีรูปแบบสีที่กำหนดเองและกำหนดเอง
  • screenrc : ฉันใช้หน้าจอ GNU เพื่อหลีกเลี่ยงการเปิดเทอร์มินัลหลายเครื่องและเก็บประวัติขณะที่ไม่ได้ลงชื่อเข้าใช้ดังนั้นฉันจึงมี screenrc ของตัวเอง

0

หากคุณสามารถเปิดการสะกดชื่อและแก้ไขชื่อไฟล์อัตโนมัติ! นั่นอาจเป็นสองสิ่งที่จะช่วยคุณประหยัดเวลาได้มากที่สุด จากนั้นเรียนรู้การใช้งาน - Bash และ Zsh มีแท็บเสร็จสมบูรณ์ Ksh มี backslash escape-backslash ที่ไม่มีประสิทธิภาพดังนั้นฉันจึงขอแนะนำ Ksh

ฉันใช้ Zsh แต่ชื่อแทนแบบนี้จะใช้ได้กับเชลล์เกือบทุกตัวยกเว้น Csh:

alias l='ls -FC --color=tty'
alias ls='ls -FC --color=tty'
alias h=history
alias m=more
alias vi=vim
alias cx='chmod +x'

ดูเหมือนว่ามีนามแฝงสำหรับ 'ps' อยู่ในนั้น แต่ฉันพบว่าตัวเองกำลังใช้ 'ps' ในหลากหลายวิธีและฉันไม่พบอะไรเลย

ใน Zsh ตั้งค่าตัวแปร RPROMPT (ไม่ใช่ตัวพิมพ์ผิด!):

RPROMPT='%d'

ไดเรกทอรีทั้งหมดจะปรากฏที่ด้านขวาของบรรทัดคำสั่งพร้อมสำหรับการตัดการวาง เพิ่มเติมในภายหลัง

คุณควรใช้ Vim ที่ทันสมัยรวบรวมอย่างถูกต้องเนื่องจากความสามารถในการมีหลาย vim-windows เป็นไฟล์และหลายบัฟเฟอร์ . vimrc ของคุณอาจมีสิ่งเช่นนี้

set mouse=c
set ml
set mls=5
set nowrap
set nobackup
set nonu
set showmatch
set tabstop=4
set shiftwidth=4
set showmode
set showcmd
set ruler
set notextauto
set laststatus=2
set mps=(:),{:},[:],<:>
set modelines=0

หลายคนมีความชอบส่วนตัว แต่ฉันเชื่อว่าแท็บ 8 ช่องว่างทำให้โค้ดอ่านน้อยลงและมีการศึกษาที่ลอยอยู่รอบ ๆ เพื่อพิสูจน์มัน

นอกจากนี้ "mouse = c" ก็มีความสำคัญเช่นกัน คุณไม่ควรใช้เมาส์เพื่อเลื่อนไปมาภายในไฟล์ การยกมือออกจากคีย์บอร์ดการแตะเมาส์และการขยับกลับช้า ใช้การเลื่อนเคอร์เซอร์ "hjkl" และการสลับหน้าคีย์บอร์ดและปุ่มเลื่อนเคอร์เซอร์อื่น ๆ

หากคุณใช้ X11 คุณควรทำบางอย่างกับการกำหนดค่า Xterm ของคุณ นี่เป็นไฟล์. Xresources ของฉัน:

XTerm*VT100.scrollBar: true
XTerm*VT100.saveLines: 1000
XTerm*VT100.cutNewLine: false 
XTerm*VT100.cutToBeginningOfLine: false
XTerm*VT100.charClass: 33:48,35:48,37:48,42:48,45-47:48,64:48,95:48,126:48
XTerm*VT100*translations: #override \n\
    <Key>F2: insert-selection(PRIMARY,CUT_BUFFER0)

ให้ Xterm เป็นแถบเลื่อนโดยค่าเริ่มต้นบันทึกข้อความ 1,000 บรรทัดในบัฟเฟอร์นั่นเป็นมาตรฐานที่ค่อนข้างดี

คำสั่ง charClass ทำให้คำว่า "คำ" รวมถึงสิ่งต่าง ๆ เช่น '.', '/' และ '*' ดับเบิลคลิกที่ส่วนใดส่วนหนึ่งของ '/' - ชื่อไฟล์ที่แยกจากกันและคุณจะได้รับสิ่งต่าง ๆ ทั้งหมด 'น้อยกว่า': อักขระ

cutToBeginningOfLine ทำงานร่วมกับ Zsh RPROMPT ด้านบน คลิกสามครั้งที่เส้นทางของไดเรกทอรีการทำงานปัจจุบันที่ปรากฏบน RHS ของบรรทัดคำสั่งของคุณและคุณรับเฉพาะเส้นทาง: การคัดลอกหยุดที่จุดเริ่มต้นของคำ มีประสิทธิภาพสูงเมื่อคุณคุ้นเคยกับมัน

ทรัพยากร X ข้างต้นยังทำให้การเป็นกุญแจสำคัญในการวาง ด้วยวิธีนี้เมื่อคุณคัดลอก (อาจใช้เมาส์) คุณสามารถวางโดยไม่ต้องขยับมือกลับไปที่เมาส์เพื่อคลิก


FWIW เสร็จสิ้นชื่อไฟล์เป็นEsc``EscหรือEsc``=ในkshและทำงานในTab ksh93ในกรณีที่ใครก็ตามติดอยู่กับมันหรือชอบมัน
มิเคล

0

การเพิ่มค่าตอบแทนที่ไม่เป็นศูนย์ของคำสั่งสุดท้ายเป็นความคิดที่ดี ฉันคิดว่าผู้โพสต์ดั้งเดิมได้ถามเกี่ยวกับ. profile / .cshrc / .bashrc โดยเฉพาะ เป็นมูลค่าการกล่าวถึงรายชื่อของไฟล์ RC ที่กำหนดเองอื่น ๆ แต่ฉันจะติดเพียงเปลือกปรับแต่งสำหรับคำถามนี้

ฉันเพิ่งเพิ่มการตั้งค่าสถานะในพรอมต์ของฉันที่แสดงขึ้นเมื่อเชลล์ทำงานภายใต้หน้าจอ มันใช้คำสั่ง solaris "ptree" เพื่อค้นหากระบวนการบรรพบุรุษ แต่คุณสามารถใช้คำสั่ง "pstree" บน Linux เพื่อทำสิ่งเดียวกัน

SCREEN=""
if [ -f /usr/bin/ptree ]; then
   if ptree $$ | grep -v grep | grep -w screen > /dev/null 2>&1; then
       SCREEN="SCREEN "
   fi
fi

ฉันใช้เวลาสองสามนาทีเพื่อหาวิธีฝังโค้ดส่งคืนของคำสั่งสุดท้ายดังนั้นฉันจะโพสต์ที่นี่

PROMPT_COMMAND='if [ "$?" = 0 ]; \
        then RC=""; \
        else RC="RV=$? "; fi; PS1="% ${SCREEN}\h $RC\w\n% "'

ฉันแน่ใจว่าสามารถทำให้สวยงามขึ้นได้ :-)

เคล็ดลับในอนาคตระวังการอ่าน $ หลังจากใช้ "ถ้า [" ถ้าวงเล็บซ้ายเป็นตัวมันจะไม่แทนที่ค่าของ $? แต่ถ้าคุณใช้เปลือกที่ [ไม่ได้อยู่ในตัวแล้วมันจะรีเซ็ตค่าของ $? หลังจากการทดสอบ การกำหนด $ ปลอดภัยกว่านี้ไหม เป็นตัวแปรชั่วคราวได้ทันทีจากนั้นทดสอบตัวแปรนั้น


คำตอบของคุณน่าจะเป็นความคิดเห็น ... เช่นนี้!
VxJasonxV

0

แสดงไฟล์ที่มีการเปลี่ยนแปลงล่าสุด

บ่อยครั้งที่ฉันต้องการดูไฟล์ล่าสุด เช่นฉันอาจอยู่ในไดเรกทอรีบันทึกและต้องการดูไฟล์ล่าสุดเพราะนั่นคือที่แรกที่ต้องดูว่าทำไมบางอย่างไม่ทำงาน

ls -lt | head เป็น แต่ยุ่งยากในการพิมพ์ดังนั้นนี่เป็นทางเลือก:

# show the most recently changed file
latest()
{
    if test $# -ne 0
    then
        /bin/ls -t -1 -d "$@" | head -n 1
    else
        /bin/ls -t -1 -d * | head -n 1
    fi
}

นอกจากนี้ยังใช้สัญลักษณ์แทนหรือรายการไฟล์เช่น

$ latest mail* syslog*
syslog

ซึ่งมีประโยชน์อย่างยิ่งหากไฟล์บันทึกทั้งหมดของคุณมีการประทับเวลาในชื่อของพวกเขา คุณสามารถค้นหาบันทึกล่าสุดสำหรับโปรแกรมนั้นโดยไม่ต้องกังวลว่ารูปแบบการประทับเวลานั้นอยู่

$ touch -d 'Feb 1' mylog.20110201
$ touch -d 'Feb 2' mylog.20110202
$ touch -d 'Feb 3' mylog.20110203
$ latest mylog*
mylog.20110203

และนี่คือเวอร์ชันเพิ่มเติมที่รองรับ-<number>ตัวเลือกในการพิมพ์<number>บรรทัดแทนที่จะเป็นหนึ่งบรรทัด

# show the most recently changed file
latest()
{
    local count=1               # how many files to print
    local promptlines=5         # how many lines to leave for the prompt
                                # when printing a screenful with -s
    local usage="Usage: latest [-n <number>] [-s] [--] [pattern]"
    while test $# -gt 0
    do
        case $1 in
        # -- = stop processing options
        --)
            shift
            break
            ;;
        # -n <number> = <number> files
        -n)
            if test -n "$2"
            then
                count=$2
                shift 2
            else
                echo "$usage" 1>&2
                return 1
            fi
            ;;
        # -s = one screenful
        -s)
            count=$((LINES - promptlines))
            shift
            ;;
        # -<number> = <number> files
        -[0-9]*)
            count=${1#-}
            shift
            ;;
        # anything else starting with a minus is a usage error
        -*)
            echo "$usage" 1>&2
            return 1
            ;;
        *)
            break
            ;;
        esac
    done

    if test $# -ne 0
    then
        /bin/ls -t -1 -d "$@" | head -n $count
    else
        /bin/ls -t -1 -d * | head -n $count
    fi
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.