[分享] find+grep.screen.vimdiff + vi 設定檔+Visual block

看板Linux作者 (WeCan)時間15年前 (2009/10/21 20:08), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
http://liwecan.pixnet.net/blog/post/28306253 == 這一篇是紀錄一些指令與設定, 包括 find+grep.screen.vimdiff + vi 設定檔+Visual block ====尋找檔案=================================== 尋找資料夾與子資料夾內, "檔名" 有 AAA 的所有檔案 $ find . -name *AAA* ---------------------------------------------------------------------- 尋找資料夾與子資料夾內, "檔案內容" 有 AAA 的所有檔案 $ grep -r AAA * ---------------------------------------------------------------------- grep 得到的結果通常太多了,所以實際上是使用下列複合的指令 找出目錄及子目錄中,所有呼叫或定義 func_name 的 .c or .h $ find . -name "*.[ch]" -exec grep -Hwn "func_name" {} \; ---------------------------------------------------------------------- 列出資料夾中,所有呼叫 func_name 的 .c or .h $ grep -m 1 -Hw "func_name" *.[ch] | cut -d':' -f1 ---------------------------------------------------------------------- 找出兩天內有變更過的 .c or .h 檔案 $ find . -type f -mtime -2 -name "*.[ch]" ----插個花------------------------------------------------------------------ 將編譯時包括 waring 的訊息(STDOUT+STDERR)輸出至 msg.txt $ make &> msg.txt ==== Screen =================================== screen 模式,等於讓 pietty 可以開分頁 1. pietty 連線進入主機後 2. 下 screen 這個指令進入 screen 模式 (會在 分頁 0) 就開始可以操作分頁了! 3. Ctrl+a + c 建立新的screen (多一個 分頁 1) 4. Ctrl+a + n 切換至下一個screen; Ctrl+a + p 切換至前一個screen 5. exit 離開這個 分頁 ---------------------------------------------------------------------- 另外有一些方便管理的指令, 1. Ctrl+a + A (先按 Ctrl+a ,放開沒關係,再按 shift+a) 可以 rename 這個 分頁 的名字,不然預設都是 "2$* bash" 之類的,很難分 2. Ctrl+a => 打指令 :sessionname myName 可以將整個 screen 的 session 設成我要的 name,跟以下的指令配合 3. Ctrl+a + d 可以暫時離開 screen 的界面 (Detached) 4. 當你 Detached 後,下 screen -ls 的指令可以看到 There is a screen on: 28833.myName.localhost (Detached) 5. 你可以靠 screen -r 28833 或是 (如果沒有改過 session 的 name 的話) screen -r myName 來重新 attached 回 screen 的界面 6. Ctrl+a => :quit 可以關閉這個 screen session 的所有分頁並跳出 ---------------------------------------------------------------------- 基於使用習慣,我會希望在畫面的最下面一行顯示分頁, 而非預設的在視窗的 windows_name 的部份顯示, 因此,我會去修改 /etc/screenrc 這個檔案, 將原本 241 行 mark 掉,改成 243 行 的寫法: 241 #hardstatus string "[screen %n%?: %t%?] %h" 242 # Add by WeCan 243 hardstatus alwayslastline '%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%< %0C' 事實上,在多人共用的主機上,較正確的做法是在個人的家目錄底下, 新增一個檔案 .screenrc 然後在裡面加上這一行 hardstatus alwayslastline '%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%< %0C' ==== vimdiff ==================================== 在比對檔案的部份,除了 diff、sdiff 之外,我覺得 vimdiff 是個好用的指令 不過…因為我是在 windows 上,用 pittey 去連我的 linux server, 所以有兩台主機,不是一台, 因此,我是直接在 linux 上架 SAMBA, (讓 windows 可以像連網芳一樣連 linux, ex: 在"我的電腦"的網址列打 \\wecan 就連過去linux那台了) 要比對檔案就直接開網芳從 linux 上把檔案拉過來, 直接用 WinMerge 這個軟體去看去比對、去修改, (在 windows 底下我覺得很好用的比對檔案軟體) so,如果也有兩台電腦的情況下,我覺得這樣是不錯的方法, 一邊 windows 這邊開圖型界面的程式比對,一邊用 linux 做修改, 軟體的界面會比較 friendly ,至少有好拉動的 bar, 還有一個隱含的好處是… 至少會備份一份起來! XD 不過…如果是只有一台 Linux 的情況, 尤其當你想要 "參照 b 檔案,編輯 a 檔案" 的時候, 我會推荐下面的做法, $ vimdiff a_file b_file vimdiff 有 "有顏色標示"."可以直接編輯"."畫面分割清楚" 等優點 其中顏色標示的部份,不僅會把不同的行標出來, 同一行中還會把不同的地方標出來,(不容易眼殘) 另外,有差異、或是沒有這一行…等,也會有不同的顏色顯示 預設的情況下,會把相同的部份給隱藏,只把有差異部份的前後n行顯示出來 (隱藏,或者說"折疊"的部份,可以靠一些指令展開或再度收起,如: zo 將游標所在處的折疊打開.open zc 將游標所在處已打開的內容再度折疊起來.close zr 將全文的所有折疊依層次通通打開.reduce zm 將全文已打開的折疊依層次通通再折疊起來.more) 可以下指令 :set nu 來顯示行號,事實上, 我是透過待會會說到的設定檔,讓 vi 每次開啟檔案就會預設帶入行號 另外,其實也不止可以編輯 a 檔案, 可以靠 "連按兩次 ctrl+w" 切換你要編輯的文件, 這部份,可以參考 :help vsp 這個功能。(落落長 重要的部份不多 囧) (其實 vimdiff = vi + :vsp filename + :set scb diff … 把一些設定給包起來) vimdiff的功能其實很強大,不過有時還是愛用 WinMerge, 因為 vimdiff …或者說 vi 這種文字界面,要不停的換 page 找地方還是很麻煩, 視窗界面的 WinMerge 拉一拉就好了,很方便 哈哈~ ==== vi 設定檔 ==================================== 在使用 vi 編輯一個檔案的時候,會預先讀入一些設定檔, 幫助格式的設定、文件類型的辨別… 等等, 在編輯一個 .c 檔案時,vi 會先跑的 script 的 typical flow 大概如下: 1: /etc/vimrc 2: /usr/share/vim/vim63/syntax/syntax.vim 3: /usr/share/vim/vim63/syntax/synload.vim 4: /usr/share/vim/vim63/syntax/syncolor.vim 5: /usr/share/vim/vim63/filetype.vim 6: /wecan/.vimrc 7: /usr/share/vim/vim63/plugin/explorer.vim 8: /usr/share/vim/vim63/plugin/gzip.vim 9: /usr/share/vim/vim63/plugin/netrw.vim 10: /usr/share/vim/vim63/plugin/rrhelper.vim 11: /usr/share/vim/vim63/plugin/tohtml.vim 12: /usr/share/vim/vim63/syntax/c.vim 在這裡的重點是第六項, 我們可以在自己使用者的家目錄下建立一個 .vimrc 檔案, 來依照自己的喜好預設 vi 開啟時的行為。 (客製化正夯! 事實上,其實我會把自己的設定弄在這個檔案,而非之前說的 vi /etc/vimrc, 讓系統預設的永遠保持原來的,會是比較安全的做法, 而放在自己家目錄底下的 .vimrc 只會影響該帳號的使用者,不會影響其他帳號 (ps1. 可透過指令 cd ~ 切換至使用者之家目錄) (ps2. 取名為 .xxxx 即為隱藏屬性的檔案,需透過 ls -a 方能列出) 以下,分享個人 .vimrc 的內容, 其中開頭有 " 的為註解文字, 在 diff 中將 wrap 打開可能會有問題,會在文末再補註 不過我算是大費周章的才終於寫出這個指令, (trace 了 vi 開檔,建立 buffer、create window、進入vim、 開第二個window…的各個時間點,然後找到了從來沒用過沒看過的 windo 指令) 所以… 用 mark 掉的方式當作紀念吧 ========================================================= " 設定 vi 編輯器為黑底控顏色 set bg=dark " 預設編輯檔案時會顯示行號 set nu " 按 F7 可以切換是否顯示行號 " (有行號較易閱讀,要複制時需要將行號拿掉,用快速鍵可以節省時間) map <F7> :set nu!<BAR>set nu?<CR> " 按 F8 可以切換是否高亮度顯示搜尋字串 " (有時搜尋某個 patten 後,在下一個文件還是會高亮顯示,很煩 = =) map <F8> :set hls!<BAR>set hls?<CR> " 給 vimdiff 用 (比較 A 檔 與 B 檔 的差異) if has("diff") " 設定超過的部份會自動換行,適合搭配顯示行號使用 " (方便能看得出來是在同一行的東西,但是可能會有問題) " au VimEnter * windo set wrap " 設定各種差異時,標示的顏色 " Add 代表新增的一行, Delete 代表刪除的一行, " Change 代表有差異的一行,Text 代表有差異的這一行中,具有差異的部份 hi DiffAdd ctermfg=Grey ctermbg=DarkBlue guifg=Grey hi DiffDelete ctermfg=Grey ctermbg=DarkRed guifg=Grey hi DiffChange ctermfg=Black ctermbg=DarkGreen guifg=Black hi DiffText ctermfg=Black ctermbg=DarkCyan guifg=Black endif " 設定按 Tab 的時候,是跳四格(預設是八格) set tabstop=4 " 設定將 Tab 展開成空格(這樣在不同的電腦、編輯器中,所見結果皆同) set et " 設定在 Makefile 裡不將 tab 展開 (Makefile 裡必需是 Tab 不能是空格) au BufEnter ?akefile*,*.mk set noet " 判斷 c 的格式,在括號後會自動縮排 set cin " 每次縮排的空格為 4 個字元 set shiftwidth=4 " 解決貼上時,因為 set tabstop 與 set cin 可能造成的問題 set paste " 在右下角顯示組合指令目前的輸入狀態 (例如在 vi 中跳到 7 行之後, 7+j 會先顯示出 7,確保你沒有誤按到其他鍵) set showcmd " 程式編輯完後,寫回磁碟之前,讓 vim 將每一行之後的空白拿掉,以節省空間 au FileType c,cpp,h au BufWritePre <buffer> :call setline(1,map(getline(1,"$"),'substitute(v:val,"\\s\\+$","","":q: ================================================== 不過,在 diff 中,預設把 wrap 打開是有可能造成問題的, 當你在 vi 中, :h diff (看 diff 的 help 檔) /wrap (搜尋 wrap 這個 patten) n (找 next) 會看到這樣的說明… The alignment of text will go wrong when: - 'wrap' is on, some lines will be wrapped and occupy two or more screen lines 實際使用上,會有左右可能差了幾行而不是真正對齊的問題, 因此,在需要 wrap 的時候,我會直接在 vi 中對兩個視窗分別下指令把 wrap 打開 BTW,使用 vimdiff 要離開的時候, 可以透過 :wqa or :qa! 同時把檔案關閉並(儲存 or 不儲存) ==== Visual block ============================== 當對一個相似的區塊做類似的修改時, Vi 的 Visual block 是個好用的功能 MODULE_PARA(aaa module_param(aaa ( 例如要把 MODULE_PARA(bbb 改成 module_param(bbb 時) MODULE_PARA(ccc module_param(ccc 1. 移至起始點 2. Ctrl+V 進入block visual mode 3. 選取範圍 4. 按 c 來 change 文字,or 按 i 來 insert 文字 5. 按 <ESC> 回到正常模式,即可見所得結果 http://en.wikibooks.org/wiki/Learning_the_vi_editor/Vim/Modes ================================================== 囧rz~~~~ 筆記得好累 囧rz~~~~~ -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.190.7

10/21 20:12, , 1F
nu那邊 可以試試 :set invnu inv就是切換
10/21 20:12, 1F

10/22 23:04, , 2F
感謝分享^^
10/22 23:04, 2F
文章代碼(AID): #1Atld0LF (Linux)
文章代碼(AID): #1Atld0LF (Linux)