Linux的一個特色就是其命令多而且功能強大, 頻繁輸入命令不僅麻煩而且工作量較大,雖然可以使用TAB進行>命令補足,或者使用aliase來簡化某個命令的輸入,但這並不能從根本上解決敲擊鍵盤次數過多的問題。
可以把任何命令或命令的組合指定給鍵盤上的某個鍵,可以是Alt+[A-Z],
Ctrl-[A-Z], Alt+Shift+[A-Z], F1-F12, Ctrl-F[1-12], Alt-F[1-12], Alt+Shift+F[1-12],還有更不可思議的是甚至還可以為功能鍵加上「參數」,這樣你按下那個鍵的時候,它會等待你輸入相應的參數,並根據不同的參數運行不同的命令。
當然,有一些熱鍵會被終端所捕獲,如常見的Ctrl-D/C/Q/Z等,不過沒關系,可用的熱鍵還多著呢!
定義熱鍵的配置文件為:/etc/inputrc 或 ~/.inputrc,定義熱鍵的格式如下:
"<熱鍵對應的ASCII字元>":"<執行的命令>"
其中熱鍵對應的ASCII字元可以通過 "先按Ctrl-V, 然後按熱鍵" 的方式來輸入, 如Ctrl-G對應的字元為^G, Alt-P對應的字元為^[p, Ctrl-Alt-H對應的字元為^[^H.
可以用/C來代替Ctrl,/M來代替Alt, /M-/C來代替Alt-Ctrl, 如/C-M = Ctrl-M, /M-/C-H = Alt-Ctrl-M. 另外還可以用/e代表^[.
先來看一些基本的熱鍵定義,(這里熱鍵里的字母不區分大小寫):
"^[-":"su -/C-M" # 按Alt+- 執行su - 命令,末尾/C-M表示輸入完定義的命令後回車,也可以更簡潔地用一個/n來表示.
"/M-/C-G":"gaim & &>/dev/null && disown/C-M"
# 按Ctrl-Alt-g在當前shell打開gaim, 並脫離該shell獨立運行,即:即使你退出了該shell, gaim也不會關閉
其他一些組合鍵可以根據自己的需要配置,偶就不多說了.
大家也許會覺得這樣定義熱鍵太亂了,而且很難記住,還有一定的限制。這個問題在後面會得到解決。
一般情況下,我們可以使用上下方向鍵來查找命令歷史列表,以此重復輸入命令,但是方向鍵離主鍵盤區太遠,如>果頻繁使用的話,會耽誤不少時間,而且挪動右手時也不太方便,有沒有什麼辦法把方向鍵的功能轉移到我們經常>敲命令的地方呢?如使用Alt+J = Down Arrow 向下查找,Alt+K=Up Arrow 向下查找
通過定義熱鍵可以做到這點:
"/eh":"^[OD" # move left
# Alt-H 向左移一個字元, 相當於Left Arrowgh, 這里^[OD即向上方向鍵的ASCII字元,輸入方式與前面提到的類似
"/el":"^[OC" # move right
# Alt-L 向右移一個字元,相當於Right Arrow
"/ej":"^[OB" # move up
# Alt-J 向下移動,相當於Up Arrow
"/ek":"^[OA" # move down
# Alt-K 向上移動,相當於Down Arrow
"/ei":"^?" # left earse one character
# Alt-I 向左刪除一個字元,相當於Backspace
"/eo":delete-char # right earse one character
# Alt-O 向右刪除一個字元,相當於Delete
"/en":backward-kill-word # left kill one word
# Alt-N 向左刪除一個單詞
"/em":kill-word # right kill one word
# Alt-M 向右刪除一個單詞
"/ea":"^[n^[n^[n^[n^[n^[n^[n" # kill to the head
# Alt-A 刪除當前位置到開頭,也就是多Alt-N幾次(A--> ahead)
"/ee":"^[m^[m^[m^[m^[m^[m^[m" # kill to the head
# Alt-E 刪除當前位置到末尾,也就是多Alt-M幾次(E--> end)
"/ep": insert-last-argumem"
# Alt-P 插入上一個命令最後一個參數 (P--> Paste)
"/ew": forward-word
# 系統默認Alt-F (forward)跳到當前單詞詞尾,如果已在詞尾,則跳到下一個單詞(右邊一個單詞)詞尾
"/eq": backward-word
# 系統默認Alt-B (backward)跳到當前單詞詞首,如果已在詞首,則跳到上一個單詞(左邊一個單詞)詞首
發覺F和B鍵離得太遠,不方便,偶分別改作Alt-Q, Alt-W, 但是Alt-F/B照樣可以用
這樣輸入命令的時候幾乎可以不用離開主鍵盤區,而且移動游標,刪除字元,刪除單詞,上下歷史命令查找都集中>在一塊,比以前方便多了。不過開始可能有些不習慣,就跟使用vi一樣,但是多練幾次就熟練了。
Linux下絕大部分服務的配置是基於配置文件的,一般說來,更改了某個服務的配置文件,要使其立即生效,還需重啟該服務直接的或依附的守護進程才行。難道你就不覺得「每次 vi /etc/xxx.conf 完後又 service xxx restart/reload 或 killall -HUP xxx」這樣做很繁瑣么?如果要配置的服務較多而且要不停地調試呢?況且我們平常使用Linux時難免會不時地終止或啟動某個服務進程,輸入命令的次數也不少。如果為每個服務都指定一個熱鍵的話,似乎不大可能。如果我們賦予一個熱鍵為一個基本鍵,而相應的服務為其「參數」,那又如何呢?
舉個例子,賦予Alt-S (S-->Start)為啟動服務的基本鍵,服務名的前2個字元為啟動「參數」,那麼就可以像下面那樣隨意啟動某個服務了:
"/essm":"service smb start/n"
# /es=Alt-s, sm=smb,
# 即:按下Alt-s後緊跟著再輸入sm(這時輸入的sm並不會顯示在終端上),就可以啟動samba的服務進程了,不必擔心按下鍵與輸入「參數」間的時間延遲問題,你按下Alt-s,然後去外面兜一圈回來,再接著輸入sm,照樣可以。
"/esht":"service httpd start/n" # ht=httpd,啟動Apache服務
類似地,我們賦予
Alt-D(D--> shutDown) 為停止服務的基本鍵
Alt-R(R--> Restart) 為重啟服務的基本鍵
Alt-T(T--> Status) 為查看服務狀態的基本鍵
Alt-C(C--> Configure) 為打開服務對應的主配置文件的基本鍵
如:"/ecnf":"vi /etc/exports/n" # Alt-c+nf 打開NFS的配置文件
"/ecsm":"vi /etc/samba/smb.conf/n" # Alt-c+sm 打開smb的配置文件
如果某個服務(如ssh)有2個配置文件,可以在其後再加一個數字,如:
"/ecssh1":"vi /etc/ssh/sshd_config/n" # 打開sshd服務端配置文件
"/ecssh2":"vi /etc/ssh/ssh_config/n" # 打開sshd客戶端配置文件
如果要執行某個應用程序呢?可以用Alt-x做基本鍵(x--> eXeccute) 如:
"/exga":"gaim & &>/dev/null && disown && clean /n"
"/exxm":"xmms & &>/dev/null && disown && clean /n"
"/exvm":"vmware & &>/dev/null && disown && clean /n" "/exna":"nautilus & &>/dev/null && disown && clean /n"
等等....
到現在為止我們只要按1個組合鍵+2個字元就可以實現下面眾多的功能:
1. 執行指定的應用程序
2. 啟動|重啟|關閉|指定的服務進程
3. 查看指定服務的狀態
4. 打開指定服務的指定配置文件
2. linux怎麼查看十六進
Linux系統有一個od命令,可以將文件的內容以16進制形式顯示出來,它的用法是這樣的:
od -t xCc 文件名
-t xCc表示用16進制來輸出文件的內容,同時用ASCII字元對照顯示,例子:
od -t xCc /etc/issue
詳細細節可以參考下面的連接。
網頁鏈接
歡迎使用騰訊電腦管家來全方位的實時保護你的電腦。
3. linux 使用方法
樓主如果不專門學習一下Linux是不會懂的,英語也要過三級才能基本操作。 LINUX使用方法!!! linux目錄架構
/ 根目錄
/bin 常用的命令 binary file 的目錄
/boot 存放系統啟動時必須讀取的檔案,包括核心 (kernel) 在內
/boot/grub/menu.lst GRUB設置
/boot/vmlinuz 內核
/boot/initrd 核心解壓縮所需 RAM Disk
/dev 系統周邊設備
/etc 系統相關設定文件
/etc/DIR_COLORS 設定顏色
/etc/HOSTNAME 設定用戶的節點名
/etc/NETWORKING 只有YES標明網路存在
/etc/host.conf 文件說明用戶的系統如何查詢節點名
/etc/hosts 設定用戶自已的IP與名字的對應表
/etc/hosts.allow 設置允許使用inetd的機器使用
/etc/hosts.deny 設置不允許使用inetd的機器使用
/etc/hosts.equiv 設置遠端機不用密碼
/etc/inetd.conf 設定系統網路守護進程inetd的配置
/etc/gateways 設定路由器
/etc/protocols 設定系統支持的協議
/etc/named.boot 設定本機為名字伺服器的配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 設置IP
/etc/resolv.conf 設置DNS
/etc/X11 X Window的配置文件,xorg.conf 或 XF86Config 這兩個 X Server 的設定檔
/etc/fstab 記錄開機要mount的文件系統
/etc/inittab 設定系統啟動時init進程將把系統設置成什麼樣的runlevel
/etc/issue 記錄用戶登錄前顯示的信息
/etc/group 設定用戶的組名與相關信息
/etc/passwd 帳號信息
/etc/shadow 密碼信息
/etc/sudoers 可以sudo命令的配置文件
/etc/securetty 設定哪些終端可以讓root登錄
/etc/login.defs 所有用戶登錄時的預設配置
/etc/exports 設定NFS系統用的
/etc/init.d/ 所有服務的預設啟動 script 都是放在這里的,例如要啟動或者關閉
/etc/xinetd.d/ 這就是所謂的 super daemon 管理的各項服務的設定檔目錄
/etc/modprobe.conf 內核模塊額外參數設定
/etc/syslog.conf 日誌設置文件
/home 使用者家目錄
/lib 系統會使用到的函數庫
/lib/moles kernel 的相關模塊
/var/lib/rpm rpm套件安裝處
/lost+found 系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下
/mnt 外設的掛載點
/media 與/mnt類似
/opt 主機額外安裝的軟體
/proc 虛擬目錄,是內存的映射
/proc/version 內核版本
/proc/sys/kernel 系統內核功能
/root 系統管理員的家目錄
/sbin 系統管理員才能執行的指令
/srv 一些服務啟動之後,這些服務所需要取用的資料目錄
/tmp 一般使用者或者是正在執行的程序暫時放置檔案的地方
/usr 最大的目錄,存許應用程序和文件
/usr/X11R6: X-Window目錄
/usr/src: Linux源代碼
/usr/include:系統頭文件
/usr/openwin 存放SUN的OpenWin
/usr/man 在線使用手冊
/usr/bin 使用者可執行的 binary file 的目錄
/usr/local/bin 使用者可執行的 binary file 的目錄
/usr/lib 系統會使用到的函數庫
/usr/local/lib 系統會使用到的函數庫
/usr/sbin 系統管理員才能執行的指令
/usr/local/sbin 系統管理員才能執行的指令
/var 日誌文件
/var/log/secure 記錄登入系統存取資料的檔案,例如 pop3, ssh, telnet, ftp 等都會記錄在此檔案中
/var/log/wtmp 記錄登入者的訊息資料, last
/var/log/messages 幾乎系統發生的錯誤訊息
/var/log/boot.log 記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息
/var/log/maillog 紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄
/var/log/cron 記錄 crontab 這個例行性服務的內容
/var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log:
分別是幾個不同的網路服務的記錄檔
一些常用的基本命令:
uname -a 查看內核版本
ls -al 顯示所有文件的屬性
pwd 顯示當前路徑
cd - 返回上一次目錄 cd ~ 返回主目錄
date s 設置時間、日期
cal 顯示日歷 cal 2006
bc 計算器具
man & info 幫助手冊
locale 顯示當前字體 locale -a 所有可用字體 /etc/sysconfig/i18n設置文件
LANG=en 使用英文字體
sync 將數據同步寫入硬碟
shutdonw -h now & half & poweroff 關機
reboot 重啟
startx & init 5 進入圖形介面
/work & ?work 向上、下查找文檔內容
chgrp 改變檔案群組 chgrp testing install.log
chown 改變所屬人 chown root:root install.log
chmod 改變屬性 chmod 777 install.log read=4 write=2 execute=1
cp 復制 cp filename
rm 刪除文件 rm -rf filename 強制刪除文件
rmdir 刪除文件夾
mv 移動 mv 123.txt 222.txt 重命名
mkdir 創建文件夾
touch 創建文件 更新當前時間
cat 由第一行開始顯示 cat |more 分頁
nl 在內容前加行號
more & less 一面一面翻動
head -n filename 顯示第N行內容
tail -n filename 顯示後N行內容
od 顯示非純文檔
df -h 顯示分區空間
顯示目錄或文件的大小
fdisk 分區設置 fdisk -l /dev/hda 顯示硬碟分區狀態
mkfs 建立各種文件系統 mkfs -t ext3 /dev/ram15
fsck 檢查和修復LINUX檔案
ln 硬鏈接 ln -s 軟體鏈接
whereis 查找命令
locate 查找
find 查找 find / -name "***.***"
which 查看工具
whoami 顯示當前用戶
gcc -v 查看GCC版本
chattr +i filename 禁止刪除 chattr -i filename 取消禁止
lsattr 顯示隱藏檔屬性
updatedb 更新資料庫
mke2fs 格式化 mkfs -t ext3
dd if=/etc/passwd of=/tmp/passwd.bak 備份
mount 列出系統所有的分區
mount -t iso9660 /dev/cdrom /mnt/cdrom 掛載光碟
mount -t vfat /dev/fd0 /mnt/floppy 掛載軟盤
mount -t vfat -o iocharset=utf8,umask=000 /dev/hda2 /mnt/hda2 掛載fat32分區
mount -t ntfs -o nls=utf8,umask=000 /dev/hda3 /mnt/hda3 掛載ntfs分區
Linux-NTFS Project: http://linux-ntfs.sourceforge.net/
umount /mnt/hda3 缷載
ifconfig 顯示或設置網路設備
service network restart 重啟網卡
ifdown eth0 關閉網卡
ifup eth0 開啟網卡
clear 清屏
history 歷史記錄 !55 執行第55個指令
stty 設置終端 stty -a
fdisk /mbr 刪除GRUB
at 僅進行一次的工作排程
crontab 循環執行的例行性命令 [e]編輯,[l]顯示,[r]刪除任務
& 後台運行程序 tar -zxvf 123.tar.gz & --------->後台運行
jobs 觀看後台暫停的程序 jobs -l
fg 將後台程序調到前台 fg n ------>n是數字,可以指定進行那個程序
bg 讓工作在後台運行
kill 結束進程 kill -9 PID [9]強制結束,[15]正常結束,[l]列出可用的kill信號
ps aux 查看後台程序
top 查看後台程序 top -d 2 每兩秒更新一次 top -d 2 -p10604 觀看某個PID
top -b -n 2 > /tmp/top.txt ----->將 top 的資訊進行 2 次,然後將結果輸出到 /tmp/top.txt
pstree 以樹狀圖顯示程序 [A]以 ASCII 來連接, 列出PID, [p]列出帳號
killall 要刪除某個服務 killall -9 httpd
free 顯示內存狀態 free -m -------->以M為單位顯示
uptime 顯示目前系統開機時間
netstat 顯示網路狀態 netstat -tulnp------>找出目前系統上已在監聽的網路連線及其 PID
dmesg 顯示開機信息 demsg | more
nice 設置優先權 nice -n -5 vi & ----->用 root 給一個 nice 植為 -5 ,用於執行 vi
renice 調整已存在優先權
runlevel 顯示目前的runlevel
depmod 分析可載入模塊的相依性
lsmod 顯示已載入系統的模塊
modinfo 顯示kernel模塊的信息
insmod 載入模塊
modprobe 自動處理可載入模塊
rmmod 刪除模塊
chkconfig 檢查,設置系統的各種服務 chkconfig --list ----->列出各項服務狀態
ntsysv 設置系統的各種服務
cpio 備份文件
壓縮命令:
*.Z compress 程式壓縮的檔案;
*.bz2 bzip2 程式壓縮的檔案;
*.gz gzip 程式壓縮的檔案;
*.tar tar 程式打包的資料,並沒有壓縮過;
*.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮
compress filename 壓縮文件 加[-d]解壓 uncompress
gzip filename 壓縮 加[-d]解壓 zcat 123.gz 查看壓縮文件內容
bzip2 -z filename 壓縮 加[-d]解壓 bzcat filename.bz2 查看壓縮文件內容
tar -cvf /home/123.tar /etc 打包,不壓縮
tar -xvf 123.tar 解開包
tar -zxvf /home/123.tar.gz 以gzip解壓
tar -jxvf /home/123.tar.bz2 以bzip2解壓
tar -ztvf /tmp/etc.tar.gz 查看tar內容
cpio -covB > [file|device] 份份
cpio -icv < [file|device] 還原</U>
4. linux中的od命令的-S參數是什麼意思
語法:od [-abcdfhilovx][-A <字碼基數>][-j <字元數目>][-N <字元數目>][-s <字元串字元數>][-t <輸出格式>][-w <每列字元數>][--help][--version][文件...]
-s:字元串字元數,只顯示字元串中指定個數的字元,並進行處理轉換。
5. Hive insert 欄位表錯位踩坑
往 Hive 表 insert 數據後,查詢時出現個別行欄位錯位,插入語句如下:
首先測試源表數據查詢:
查詢來的數據沒發現有什麼異常;照理說逐欄位查出來沒問題,再逐欄位插入應該不會錯位。實際上 hive 的 insert 跟想像中傳統的 insert 不太一樣。
由於不是全表錯位,而是個別行錯位,首先根據關鍵字查詢 hive 錯位那行數據,導出文本到本地。肉眼查看發現有部分"亂碼"(異常字元: ^M ,如果經驗豐富一眼就能看出這個是 \001 ,vim 下可以通過組合鍵 ctrl + a 輸出),懷疑是異常字元導致,通過 linux od 命令查看 16 進制編碼,如圖所示:有好幾個 \001 ,多麼眼熟的數字啊 - 這是 hive 默認欄位分隔符。
一般 insert A from select B 我們沒有關注 A 表的欄位分隔符,看到 \001 直覺跟 A 表的欄位分隔符有關:
查看 A 的表結構,欄位分隔符默認的 \001 。存儲類型: textfile 。
進一步分析:textfile 是 hive 默認的存儲結構,行存儲,存儲的實際數據結構跟表邏輯結構一致。導入數據時會直接把數據文件拷貝到 hdfs上不進行處理。源文件可以直接通過hadoop fs -cat 查看; 例如 text 欄位分隔符: \001 , 換行符: \n,表在 hdfs 實際存儲的格式為:
v1\001v2\001v3\n
v4\001v5\001v5
猜測欄位值缺失錯位的根源在於:文本中的不可見字元 \001 插入到表中,而表以 \001 作為欄位分隔符,導致查詢欄位錯位。
再來看這條 SQL:
我們可以還原這條 SQL 從插入到查詢異常的全流程:
第一種方式可行且更加合理;
第二種方式可行,一種補救方案,但是 orc 等格式不支持 load 操作
第三種方式臨時解決問題,不能根本上解決問題;
對 hive 的基礎知識了解不足,導致問題出現排查速度較慢。
數據源頭進行必要的數據 ETL 清洗,對欄位分隔符的處理必須謹慎。
Hive 表盡可能使用 orc parquet 這類存儲方式,空間佔用,查詢效率相對 textfile 有大幅提升,同時可以規避欄位分隔符,錯位等問題。
更深入一步 了解 hive orc 這類存儲方式實現原理。
6. linux小技巧
我有vim的,都是自己平時用的時候積累的,現在第一次放出。
1 2 啟動Vim時的選項 vim -c cmd file: 在打開文件前,先執行指定的命令;vim -r file: 恢復上次異常退出的文件;vim -R file: 以只讀的方式打開文件;vim -y num file: 將編輯窗口的大小設為num行;vim + file: 從文件的末尾開始;vim +num file: 從第num行開始;
Contents 2 3 游標的移動 h: 左移一個字元;l: 右移一個字元;j: 下移一個字元;k: 上移一個字元;w: 前移一個單詞,游標停在下一個單詞開頭;e: 前移一個單詞,游標停在下一個單詞末尾;b: 後移一個單詞,游標停在上一個單詞開頭;ge: 後移一個單詞,游標停在上一個單詞末尾;fc: 把游標移到同一行的下一個c字元處上面的操作都可以配合n使用,比如在正常模式(下面會講到)下輸入3h,則游標向左移動3個字元。
0或^:移動到行首。$: 移動到行尾。gg: 到文件頭部。G: 到文件尾部。nG: 到文件第n行。:n<cr> 移動到第n行。:$<cr> 移動到最後一行。n|: 把游標移到遞n列上。+或Enter:把游標移至下一行第一個非空白字元。-: 把游標移至上一行第一個非空白字元。H: 把游標移到屏幕最頂端一行。L: 把游標移到屏幕最底端一行。ctrl+f: 下翻一屏。ctrl+b: 上翻一屏。ctrl+d: 下翻半屏。ctrl+u: 上翻半屏。Contents 3 4 Vim的幾種模式 正常模式:可以使用快捷鍵命令,或按:輸入命令行。插入模式:可以輸入文本,在正常模式下,按i、a、o等都可以進入插入模式。可視模式:正常模式下按v可以進入可視模式,在可視模式下,移動游標可以選擇文本。塊選擇模式:正常模式下按ctrl+v進入。替換模式:正常模式下,按R進入。Contents 4 5 插入 i: 在游標前插入;I: 在當前行最前插入;a: 在游標後插入;A: 在當前行最後插入;o: 在下面新建一行插入;O: 在上面新建一行插入;:r filename 在當前位置插入另一個文件的內容。:r !date 在游標處插入當前日期與時間。同理,:r!command可以將其它shell命令的輸出插入當前文檔。Contents 5 6 改寫 c[n]w: 改寫游標後1(n)個詞。c[n]l: 改寫游標後n個字母。c[n]h: 改寫游標前n個字母。[n]cc: 修改當前[n]行。[n]s: 以輸入的文本替代游標之後1(n)個字元,相當於c[n]l。[n]S: 刪除指定數目的行,並以所輸入文本代替之。注意,類似cnw,dnw,ynw的形式同樣可以寫為ncw,ndw,nyw。Contents 6 7 替換 r: 替換游標處的字元,同樣支持漢字。R: 進入替換模式,按esc回到正常模式。Contents 7 8 撤消與重做 [n] u: 取消一(n)個改動。ctrl + r: 重做最後的改動。U: 取消當前行中所有的改動。Contents 8 9 剪切和復制、粘貼 [n]x: 剪切游標右邊n個字元,相當於d[n]l。[n]X: 剪切游標左邊n個字元,相當於d[n]h。y: 復制在可視模式下選中的文本。yy or Y: 復制整行文本。 yy 是復制一行文本的命令,則5yy 表示復制從前行開始的5行y[n]w: 復制一(n)個詞。y[n]l: 復制游標右邊1(n)個字元。y[n]h: 復制游標左邊1(n)個字元。y$: 從游標當前位置復制到行尾。y0: 從游標當前位置復制到行首。:m,ny<cr> 復制m行到n行的內容。y1G或ygg:復制游標以上的所有行。yG: 復制游標以下的所有行。d: 刪除(剪切)在可視模式下選中的文本。d$ or D: 刪除(剪切)當前位置到行尾的內容。d[n]w: 刪除(剪切)1(n)個單詞d[n]l: 刪除(剪切)游標右邊1(n)個字元。d[n]h: 刪除(剪切)游標左邊1(n)個字元。d0: 刪除(剪切)當前位置到行首的內容[n] dd: 刪除(剪切)1(n)行。:m,nd<cr> 剪切m行到n行的內容。d1G或dgg:剪切游標以上的所有行。dG: 剪切游標以下的所有行。p: 在游標之後粘貼。P: 在游標之前粘貼。Contents 9 10 查找和替換 /something: 在後面的文本中查找something。?something: 在前面的文本中查找something。n: 向後查找下一個。N: 向前查找下一個。:s/old/new: 用new替換當前行第一個old。:s/old/new/g: 用new替換當前行所有的old。:n1,n2s/old/new/g: 用new替換文件n1行到n2行所有的old。:%s/old/new/g: 用new替換文件中所有的old。:%s/^/xxx/g: 在每一行的行首插入xxx,^表示行首。:%s/$/xxx/g: 在每一行的行尾插入xxx,^表示行尾。所有替換命令末尾加上c,每個替換都將需要用戶確認。如:%s/old/new/gc%: 找到對應的([{.Contents 10 11 多行縮進縮出 正常模式下,按兩下>;游標所在行會縮進。如果先按了n,再按兩下>;,游標以下的n行會縮進。對應的,按兩下<;,游標所在行會縮出。如果在編輯代碼文件,可以用=進行調整。在可視模式下,選擇要調整的代碼塊,按=,代碼會按書寫規則縮排好。或者n=,調整n行代碼的縮排。Contents 11 12 打開和關閉文檔 :e file –關閉當前編輯的文件,並開啟新的文件。如果對當前文件的修改未保存,vi會警告。:e! file –放棄對當前文件的修改,編輯新的文件。:e+file – 開始新的文件,並從文件尾開始編輯。:e+n file – 開始新的文件,並從第n行開始編輯。:enew –編譯一個未命名的新文檔。:e – 重新載入當前文檔。:e! – 重新載入當前文檔,並丟棄已做的改動。:w – 保存修改。:n1,n2w filename – 選擇性保存從某n1行到另n2行的內容。:wq – 保存並退出。:x – 保存並退出。:saveas newfilename – 另存為Contents 12 13 多標簽編輯 :tabe filename – 在新的標簽中打開一個文件。:tabn – 切換到下一個標簽。:tabp – 切換到上一個標簽。Contents 13 14 分屏編輯Contents 13.1 14.1 水平分割 :split(:sp) – 把當前窗水平分割成兩個窗口。:split filename – 水平分割窗口,並在新窗口中顯示另一個文件。:nsplit(:nsp) – 水平分割出一個n行高的窗口。:new – 水平分割出一個窗口,並編輯一個新文件。ctrl+w + –當前窗口增高一行。也可以用n增高n行。ctrl+w - –當前窗口減小一行。也可以用n減小n行。ctrl+w _ –當前窗口擴展到盡可能的大。n ctrl+w _ – 當前窗口的高度設定為n行。Contents 13.2 14.2 垂直分割 :vsplit(:vsp) – 把當前窗口分割成水平分布的兩個窗口。:vnew – 垂直分割出一個新窗口。:vertical 水平分割的命令:相應的垂直分割。Contents 13.3 14.3 關閉子窗口 :qall – 關閉所有窗口,退出vim。:wall – 保存所有修改過的窗口。:only – 只保留當前窗口,關閉其它窗口。:close – 關閉當前窗口。(象 :q :x同樣工作 )Contents 13.4 14.4 切換和移動窗口 [如果支持滑鼠,切換和調整子窗口的大小就簡單了。]ctrl+w ctrl+w: 切換到下一個窗口。或者是ctrl+ww。ctrl+w h(l,j,k):切換到左(右,下,上)的窗口。ctrl+w t(b):切換到最上(下)面的窗口。<BR>ctrl+w H(L,K,J): 將當前窗口移動到最左(右、上、下)面。正因為vim強大的分屏功能,我們可以把vim打造成功能強大的IDE。Contents 14 15 一次編輯多個文件 我們可以一次打開多個文件,如vi a.txt b.txt c.txt 使用:next(:n)編輯下一個文件。使用:previous編輯上一個文件。使用:wnext,保存當前文件,並編輯下一個文件。使用:wprevious,保存當前文件,並編輯上一個文件。使用:args顯示文件列表。Contents 15 16 文件的編碼 :e ++enc=utf8 filename, 讓vim用utf-8的編碼打開這個文件。:w ++enc=gbk,不管當前文件什麼編碼,把它轉存成gbk編碼。:set fenc或:setfileencoding,查看當前文件的編碼。在vimrc中添加setfileencoding=utf-8,cp936,ucs-bom,vim會根據要打開的文件選擇合適的編碼。注意:編碼之間不要留空格。cp936對應於gbk編碼。ucs-bom對應於windows下的文件格式。讓vim正確處理文件格式和文件編碼,有賴於~/.vimrc的正確配置。Contents 16 17 執行命令 :! cmd 執行外部命令。:!! 執行上一次的外部命令。@: 重復上一次的冒號命令。:sh 調用shell,用exit返回vim。:r !cmd 將命令的返回結果插入文件當前位置。:m,nw !cmd 將文件的m行到n行之間的內容做為命令輸入執行命令。Contents 17 18 一些快捷鍵(收集中) K: 打開游標所在詞的manpage。*: 向下搜索游標所在詞。#: 向上搜索游標所在詞。~: 反轉游標所在字元的大小寫。%: 移動到匹配的(),{}或[]上。 Contents 18 19.多行縮進
按v進入visual狀態,選擇多行,用>或<縮進或縮出
通常根據語言特徵使用自動縮進排版:在命令狀態下對當前行用== (連按=兩次), 或對多行用n==(n是自然數)表示自動縮進從當前行起的下面n行。你可以試試把代碼縮進任意打亂再用n==排版,相當於一般IDE里的code format。使用gg=G可對整篇代碼進行排版。
1、交換兩個字元位置xp;
上下兩行調換ddp;
上下兩行合並 J;
從當前位置復制到行尾y$
如果要粘貼到其他地方 p 就可以了
刪除所有行 dG
從當前位置刪除到行尾d$
2、:X
保存後就加密了
:X
然後系統會提示輸入密碼
輸入密碼後存檔退出
下次編輯時請使用
vi -x filename
系統會提示你輸入密碼,呵呵
例:以HP-UX為例
a、加密
vi file
:X
(Are you sure?(y/n)[n]:)回答y
輸入密碼回車以後再保存,就加密成功了
b、解密
vi -C file 或者 vi -x file
在 Key: 後面輸入密碼進入file
:X
(Are you sure?(y/n)[n]:)回答y「
vim在默認的情況下,用/或?來查找字元串時,是區分大小寫的,有時候很不方便。
我們可以用
:set ic
這樣vim就不區分大小寫了。
如果我們像區分大小寫
:set noic
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
Contents 19 VIM宏的錄制和使用: Running a macro: @q
Viewing a macro: :registers | :reg m
Saving a macro: let @a='0fa' 也可以加到.vimrc中
Recording a macro: q<letter><commands>q
Execute a macro: <number>@<letter>http://vim.wikia.com/wiki/Macros
Contents 20 如何快速從正文復制一段字元到Vim命令行?
先 yank
然後 ctrl+r "
詳見 :help :
Contents 21 shell 下匹配中文的搜索
:vimgrep /[^\x00-\xff]/g /app/www/gamelive/default.sdo.com/public/api/**/*.php
//把^去掉則匹配任意英文字元(非中文字元)
:cnext (:cn)
:cprevious (:cp)
:cwindow (:cw)
比如命令:
:vimgrep /an error/ *.c
就是在所有的.c文件中搜索an error。
:vimgrep/an error/*
意思是查找當前目錄下的文件中的an error,不包括子目錄
:vimgrep/an error/**
查找當前目錄並且包括遞歸子目錄下的所有文件
:vimgrep/an error/**/*.php
查找當前目錄並且包括遞歸子目錄下的所有PHP
vimgrep會產生一個error list,其實就是搜索結果列表。並會打開第一個符合的文件中第一個符合的位置。
Contents 22 以16進制編輯 首先,打開二進制文件時要加參數"-b",不然會報文件第一行錯誤.
$vim -b tuxcmd
打開文件後,默認是文本格式的,我們用":%!xxd"可以切換到十六進制編輯.
:%!xxd
是不是和utaredit很像呀?還可以加上參數-c來設置每行顯示多少位元組,比方用":%!xxd -c 16",就會顯示成16位元組一行.
如果用":%!od"命令,則會隱藏左側的文本列.
不過,有一點不爽的就是改變文本列,不會改變16進制里的數據,只能手動在16進制列做修改.在文本列里的修改是不會生效的.
注意:修改完成後,不要保存,要再用":%!xxd -r"切換成文本狀態格式再保存.
:%!xxd -r
匹配括弧匹配:
% 可以讓游標從它當前所在的括弧跳轉到與它相匹配的括弧上去, 對花括弧和
圓括弧, 方括弧都有效, 常用於手工檢查括弧是否匹對.
緩沖文件切換:
map <F12> <ESC>:bp<RETURN> " right arrow (normal mode) switches buffers (excluding minibuf)
"map <F12> :TlistToggle<CR>
"map <C-right> <ESC>:bn<RETURN> " right arrow (normal mode) switches buffers (excluding minibuf)
"map <C-left> <ESC>:bp<RETURN> " left arrow (normal mode) switches buffers (excluding minibuf)