首先,我要问问:为什么要用vi?这个昨日黄花,一点都不好用,却被有些人吹为学Linux必学工具;我真不能理解。其实,现在在命令行或者X Window下有很多很好的编辑工具。为什么放着好好的工具不用,却要ask for trouble? 好了,牢骚发完,如果你真的那么对vi情有独钟,这里是你的问题的我的答案:
0 }- X0 Y- P/ E ?要复制数据,先把光标移动到所要复制数据的第一行,然后用以下命令:$ m5 ^9 `! v0 @" `
yy表示复制当前行
2 Q, K& R$ V4 P; Bnyy表示复制从当前行开始的n行 q# n2 s2 b& Y9 @+ ^2 [2 G$ C
内容将被复制到一个特定的内存缓冲区。(从文中删除的内容其实也被复制到缓冲区,从而可以实现剪切功能。)该缓冲区,并不是“剪贴板”,因为它是不能为vi以外的程序使用的。- |/ D; i, R* c( H+ ?6 E% n7 v
要把缓冲区的内容粘贴到指定位置,用下面的命令:
0 p( D' p4 z$ Z: w4 h; sp (小写p,将缓冲区的内容粘贴到光标后面)
/ M0 D( ^2 Z3 |9 f3 iP (大写P,将缓冲区的内容粘贴到光标前面)
( p) d$ m3 w1 M; n4 p. t+ Z最后还是建议你使用X Window下的编辑工具,例如KWrite,使用方法简单而有方便;就是要使用vi,如果你是想用来编辑程序源代码,那么请用vim,它能高亮显示保留词和命令。
' B2 Y+ a9 `7 |5 l2 H4 z4 {" ]
; o2 Z4 Y2 o% b/ V第二个问题。gcc是用来编译程序,而不是用来调试程序的。调试程序要用特定的工具。例如gdb(又是一个被吹捧,却难用的东西),KDbg等。其中,KDbg是GUI的,使用方法一目了然,这里不说了。还是把废话留给gdb吧。. o& u& V& j! J% `6 U
gdb用法很多,这里只介绍最常用的。0 A: @2 X3 n4 }$ l& U! n
* y( Y. p( r7 ?! ^
启动:
" q9 h3 r/ L% v, E- j$ rgdb program 把可执行文件program调人,以调试2 ?2 g$ k# }, J3 ?& Q. i
gdb program core 调试中,分析core文件
2 {9 W$ h3 o1 S* h3 F9 r, Z( qgdb 直接进入+ g# D& w5 o- h! s; p, V6 \7 q
3 G/ y( O7 i$ E! m. Y
在线帮助:
* _7 M/ [6 r8 O7 p$ e进入后,用help命令8 o0 k7 [* P% T- H! `
8 D/ J1 N% [2 I; u1 P4 p9 U开始调试:0 A) \% ~1 u8 d0 s
run
9 F8 C/ d& F( E: ]7 X6 e4 @6 R0 j( G+ T) i
设断点:. ?! k; B& A" _& o+ |! U* ]
break n 在当前文件的第n行设置断点
\% ~+ @, j7 r# h4 u( bbreak function 在当前文件的function函数入口处设置断点
z' \- Q# T& t1 @, t" _8 X6 Zbreak file:n 在file文件中的第n行设置断点
, y, C$ p" y3 B. W0 h8 m) ]4 R% L- T. pbreak file:fun 在file文件中的fun函数入口处设置断点1 T, a s& }* t+ [- g% @
% Q% c5 k% v7 I5 s/ R9 W单步调试:
# l4 K9 }! i9 l% ^step 单步执行,遇函数进入
: A/ a5 y' y0 g4 d: M7 ~step n 同上,执行n步
! e: e! p6 F8 f- q2 u1 B) F& gnext 单步,但遇函数不进入
' n, y8 K. L0 W; Xcontinue 继续执行,知道结束或断点" Y( [9 ?7 Q& N; F8 u0 I5 j; v
: i& C: J4 K% m4 x( |最后,给个建议,能用方便的工具,就方便的,没必要自找麻烦!!