[分享] find+grep.screen.vimdiff + vi 設定檔+Visual block
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
10/21 20:12, 1F
推
10/22 23:04, , 2F
10/22 23:04, 2F
Linux 近期熱門文章
23
129
PTT數位生活區 即時熱門文章