配置你的 csh/tcsh

配置你的 csh/tcsh

 

選擇 csh/tcsh

和許多剛從 Linux 轉到 BSD 的人不同,我並沒有裝完 BSD 就順手安裝 bash,
因爲之前除了打命令,我沒有用到額外的功能,bash 也好,csh 也罷,在我眼裏都是當做 shell 來用。
但是漸漸地,我發現 csh 真的挺好用,它小巧、簡單、開放,不需要額外依賴。
 

可能有人要拿腳本能力來作對比,比如bash腳本支持函數,csh不支持等。
對我來說,其實我從未像模像樣地寫過一個腳本,我的工作是 C++ 程序員。
從我的角度來看,
論腳本能力,其實bash、csh、zsh都比不上Python,
論兼容性,bash、csh、zsh都比不上sh,
論強大,bash、csh、zsh都比不上C/C++,甚至asm。
再看易學程度,bash、csh、zsh可能還是要輸給Python。
綜上,腳本能力忽略不計。:-x
 

好了,說了這麼多大不敬的話,我們開始切入正題。8-)

配置文件

全局配置文件 /etc/csh.cshrc
個人配置文件 ~/.cshrc或~/.tcshrc
 

爲了方便,建議修改全局性的配置文件,這樣每個賬號都可以享受便利。
 

按鍵綁定

通常,我們不設置按鍵綁定也能很好地工作,
但是對於遠程登錄,可能需要一些額外的配置。
比如,爲了避免putty登錄後,Home、End、Delete等變成~,你需要如下配置:
 

bindkey '\e[1~' beginning-of-line      # Home
bindkey '\e[3~' delete-char            # Delete
bindkey '\e[4~' end-of-line            # End
bindkey "^W" backward-delete-word      # Delete
bindkey -k up history-search-backward  # PageUp
bindkey -k down history-search-forward # PageDown

提示符

設置一個漂亮使用的的提示符可以讓工作變得更愉快高效。
以下是一個合理的配置方案:
 

if ( $?prompt ) then                                #如果$prompt變量尚未設置,則做如下設置
     if ( "$uid" == "0" ) then                      #判斷用戶的uid
         set prompt = "%U%n%u@%m [%l] %B%~%b # "    #對於root,我們顯示“#”號
     else
         set prompt = "%U%n%u@%m [%l] %B%~%b % "    #對於普通用戶,顯示“%”號。
     endif
endif

Konsole中的效果如下:
prompt2_img

一種彩色的配置方案如下:
 

set cr = "%{\e[31m%}" #開始紅色
set cg = "%{\e[32m%}" #開始綠色
set c0 = "%{\e[0m%}"  #恢復爲默認色彩

# Set some variables for interactive shells
if ( $?prompt ) then
    if ( "$uid" == "0" ) then
	set prompt = "%B%U%n%u@%m.$cr%l$c0%b %c2 %B%#%b " 
    else
	set prompt = "%B%U%n%u@%m.$cg%l$c0%b %c2 %B%%%b "
    endif
endif

Konsole中的效果如下:
prompt3.png

顏色代碼:
1 for brighter colors
4 for underlined text
5 for flashing text
30 for black foreground
31 for red foreground
32 for green foreground
33 for yellow (or brown) foreground
34 for blue foreground
35 for purple foreground
36 for cyan foreground
37 for white (or gray) foreground
40 for black background
41 for red background
42 for green background
43 for yellow (or brown) background
44 for blue background
45 for purple background
46 for cyan background
47 for white (or gray) background
 

查看更多參數,及其作用:
 

man tcsh  #查看man手冊
/%/       #搜索到“%/”開始的地方

環境變量等

你在抱怨 FreeBSD下的 ls 沒有顯示顏色, grep 出來的東西沒有高亮嗎?那麼你需要如下的配置:
 

#讓 ls 鮮豔些
setenv LSCOLORS ExGxFxdxCxegedabagExEx
setenv CLICOLOR yes
#讓 grep 匹配到的字符高亮
setenv GREP_OPTIONS --color=auto

對於在KDE下使用fcitx的人,需要如下三行設置,
其實就是fcitx安裝完後所提示的內容,如果你夠細心的話。
 

setenv XMODIFIERS @im=fcitx
setenv QT_IM_MODULE xim
setenv GTK_IM_MODULE xim

嗯, ls 有顏色了,但是等等,爲何 tab 不能補全?
你需要如下配置:
 

set autolist

如果命令輸錯了,讓csh/tcsh 爲你糾正:
 

set correct = cmd

爲了在命令行啓動某個遊戲,或者kde程序,例如dolphin、kcalc,
你需要加兩個路徑到$path中去:
/usr/games /usr/local/kde4/bin/

set path = (/sbin /bin /usr/sbin /usr/local/bin /usr/games /usr/local/sbin /usr/bin $HOME/bin /usr/local/kde4/bin/) 

黑魔法防禦術

 

重定向防禦

重定向很強大,我們有時候會運行諸如“date » b.txt”,“ls -l > files.txt”等命令。
然而如果一不小心,把“»”輸成“>”會造成什麼後果呢?
爲此,tcsh提供了noclobber這個選項:
 

set noclobber

有了它,悲劇就不會發生。如果“>”的目標文件已存在,tcsh會拒絕重定向。
 

覆蓋防禦

是否遇到過“mv a b”,從而把有用的b文件覆蓋掉了?
爲此,我們要讓mv和cp的行爲更謹慎:
 

alias mv 'mv -i'
alias cp 'cp -i'

如果目標文件已存在,mv和cp會拒絕操作,除非使用參數“-f”。
 

誤刪防禦

rm這個命令自從誕生起,就一直是個危險的操作。
我們可以讓rm更溫和:
 

alias rm 'rm -i'

這樣rm之前,會要求再次確認。
 

一切皆alias

前面,我們在黑魔法防禦術中已經初步見識了alias。
alias不僅可以避免危險操作,還可以簡化命令,自創命令。
除非極短,否則良好的alias命名,應當以某個統一的單詞或字母開頭,
例如下面即將展示的reload/edit系列、update系列、show系列等。
 

先展示最基本的alias,並逐條解釋。
 

alias ..    'cd ..'       #兩點即可回到上級目錄
alias -	    'cd -'        #一槓返回上次的目錄
alias q	    'exit'        #退出登錄
alias rm    'rm -i'       #誤刪防禦
alias del   'rm -r'       #刪除整個目錄
alias mv    'mv -i'       #覆蓋防禦
alias cp    'cp -i'       #覆蓋防禦
alias ls    'ls -I'       #root狀態下,默認不顯示隱藏文件(.*)。BSD的ls很特殊,root默認顯示所有文件。
alias la    'ls -a'       #顯示所有文件
alias ll    'ls -h -l'    #顯示文件權限和大小(以合理的單位)
alias lr    'ls -R'       #遞歸顯示目錄
alias dh    'df -h -a -T' #以合適的單位顯示所有磁盤的剩餘空間,以及文件系統類型(如ufs、devfs、procfs)。
alias ds    'du -sh'      #以合適的單位顯示查看每個文件/文件夾的大小

find/wc系列。快速查找當前目錄下的所有c/cxx/python源碼文件。結合wc可以統計行數。
 

alias find-c	'find . -name "*.h" -o -name "*.c"'
alias find-x	'find . -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.cxx"'
alias find-py	'find . -name ".py"'
alias wc-c	'find . -name "*.h" -o -name "*.c" | xargs wc | sort -k 4'
alias wc-x	'find . -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.cxx" | xargs wc | sort -k 4'
alias wc-py	'find . -name ".py" | xargs wc | sort -k 4'

reload/edit系列。實現快速修改,載入配置文件。
 

alias reload-rc.conf  'sh /etc/rc'
alias reload-cshrc    'unalias * && source /etc/csh.cshrc'
alias edit-xorg.conf  'vim /etc/xorg.conf'
alias edit-csh.cshrc  'vim /etc/csh.cshrc'
alias edit-make.conf  'vim /etc/make.conf'
alias edit-kern.conf  'vim /etc/kernconf/thinkpad'
alias edit-rc.conf    'vim /etc/rc.conf'
alias edit-vimrc      'vim /usr/local/share/vim/vimrc'

set系列。快速設置locale。

alias setlocale-zhcn 'setenv LC_ALL zh_CN.UTF-8 && setenv LANG zh_CN.UTF-8'
alias setlocale-c    'setenv LC_ALL C'

startx專用。
保持命令行下爲英文locale(避免date等命令出現亂碼),而讓x環境爲中文,適合手動startx而不是kdm的人。

alias sx 'setenv LC_ALL zh_CN.UTF-8 && setenv LANG zh_CN.UTF-8 && startx && setenv LC_ALL C'

make系列。快速編譯kernel/world。

alias make-world  'cd /usr/src && make buildworld && cd -'
alias make-kernel 'cd /usr/src && make kernel KERNCONF=thinkpad && cd -'
alias make-installworld 'cd /usr/src && make installworld && make delete-old && cd -'

show系列。查看狀態或某些信息。

alias show-ifstat	'systat -ifstat'    #查看網絡接口的數據流量
alias show-geom		'gstat'             #查看I/O狀態
alias show-thermal	'sysctl dev.acpi_ibm.0.thermal'  #查看ThinkPad筆記本的各部分溫度
alias show-cpufreq	'sysctl dev.cpu.0.freq'          #查看當前cpu頻率
alias show-cpulevels	'sysctl dev.cpu.0.freq_levels'   #查看可用的cpu頻率
alias show-battery	'sysctl hw.acpi.battery.life && sysctl hw.acpi.battery.time' #查看電力
alias show-smartctl	'smartctl -a /dev/ad4'           #需要安裝smartmontools,查看磁盤smart參數
alias show-alldep	'make all-depends-list'            #需要在ports的安裝目錄下執行,顯示所有依賴
alias show-dep		'portmaster --show-work ./ | sort' #同上,且需要安裝portmaster,只顯示尚未安裝的依賴
alias show-ver		'pkg_version -v'                   #查看是否有軟件可更新

update系列。顧名思義,更新嘛。
 

alias update-locatedb    '/usr/libexec/locate.updatedb'            #更新locate數據庫
alias update-kernsrc     'csup -L 2 /etc/supfiles/stable-supfile'  #同步kernel tree
alias update-ports       'portsnap fetch update'                   #同步ports tree
alias update-apps	 'portmaster -a --force-config'            #需要安裝portmaster,更新所有軟件,提示配置選項

雜項,均需要安裝第三方軟件才能用。

alias lt    'tree -N -C'       #需要安裝tree。樹狀顯示目錄,-N可以保證中文顯示,-C使用彩色
alias l3    'tree -N -C -L 3'  #目錄最多遞歸三級
alias l4    'tree -N -C -L 4'  #四級
alias l5    'tree -N -C -L 5'  #五級
alias l6    'tree -N -C -L 6'  #六級
alias v	    'vim'              #不用說,我懶
alias m     'mocp'             #控制檯下的cs架構播放器
alias getdir	'wget -c -r -np -k'                  #遞歸下載目錄
alias ssh-home	'ssh raphael.vicp.cc -l root'        #用root賬號登錄,結合key可以免輸密碼
alias ftp-home   'ftp ftp://syh:[email protected]' #BSD自帶的ftp,免輸賬號密碼。主機已被電信和工信部和諧,勿再試
alias lft-phome	'lftp raphael.vicp.cc -u syh,syh'    #lftp的免輸賬號密碼。
alias scons	'scons -Q -j 4'                      #構建工具,默認4個線程進行
alias valgrind-checkmem 'valgrind --tool=memcheck --leak-check=full'  #檢查內存泄漏

最好的教材

最好的教材莫過於man手冊,真的什麼都有了。

man tcsh

轉載:http://wiki.freebsdchina.org/howto/c/config_your_csh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章