comparison etc/TUTORIAL.th @ 412:697ef44129c6 r21-2-14

Import from CVS: tag r21-2-14
author cvs
date Mon, 13 Aug 2007 11:20:41 +0200
parents 74fd4e045ea6
children 95016f13131a
comparison
equal deleted inserted replaced
411:12e008d41344 412:697ef44129c6
1 ============================== 1 ==============================
2 GNUEMACS ภาษาญี่ปุ่น (Mule) เบื้องต้น 2 GNUEMACS ,T@RIR0-Uh10;Xh19(B (Mule) ,T`0:Wi1M'05i19(B
3 ============================== 3 ==============================
4 4
5 หมายเหตุ: เอกสารฉบับเบื้องต้นนี้ ถูกเขียนขึ้นโดยยึดหลักที่ว่า "ลองเล่นเลยดีกว่าเรียนรู้" 5 ,TKARB`K05X1(B: ,T`M!JRC)0:Q1:`0:Wi1M'05i1909Ui1(B 0,T6Y1!`0"U1B90"Vi19b4B0BV14K0EQ1!07Uh10Gh1R(B ",TEM'`0Eh19`EB04U1!0Gh1R`0CU1B90CYi1(B"
6 บรรทัดที่เริ่มต้นด้วย ">>" จะมีคำสั่งว่า ต่อไปจะให้ทำอะไร 6 ,T:CC07Q1407Uh1`0CTh1A05i1904i1GB(B ">>" ,T(P0AU1$S0JQh1'0Gh1R(B 0,T5h1Md;(Pc0Ki17SMPdC(B
7 7
8 โดยทั่วไป การป้อนคำสั่งให้กับ Mule ทำได้โดยใช้ ปุ่มคอนโทรล (ปุ่มที่บนหน้าสัมผัส เขียนไว้ 8 ,Tb4B07Qh1Gd;(B ,T!RC0;i1M9$S0JQh1'c0Ki10!Q1:(B Mule ,T7Sd04i1b4Bc0*i1(B 0,T;Xh1A$M9b7CE(B (0,T;Xh1A07Uh1:9K09i1R0JQ1A0<Q1J(B ,T`0"U1B9d0Gi1(B
9 ว่า CTRL หรือ CTL) หรือ ปุ่ม META (โดยปกติ หมายถึงปุ่ม ESC) ในที่นี้ เราจะใช้สัญลักษณ์ต่อไป 9 0,TGh1R(B CTRL ,TK0CW1M(B CTL) ,TK0CW1M(B 0,T;Xh1A(B META (,Tb4B;!05T1(B ,TKARB06V1'0;Xh1A(B ESC) ,Tc907Uh109Ui1(B ,T`CR(Pc0*i10JQ1-0EQ1!I03l105h1Md;(B
10 นี้ แทนการเขียนเต็ม ๆ ว่า CONTROL หรือ META 10 0,T9Ui1(B ,Ta79!RC`0"U1B9`05g1A(B ,Tf(B 0,TGh1R(B CONTROL ,TK0CW1M(B META
11 11
12 C-<ตัวอักษร> หมายถึง ให้กดปุ่มคอนโทรลค้างไว้ แล้วกดปุ่ม <ตัวอักษร> ตัวอย่างเช่น C-f 12 C-<0,T5Q1G0MQ1!IC(B> ,TKARB06V1'(B ,Tc0Ki1!40;Xh1A$M9b7CE0$i1R'd0Gi1(B ,Ta0Ei1G!40;Xh1A(B <0,T5Q1G0MQ1!IC(B> 0,T5Q1GM0Bh1R'`0*h19(B C-f
13 หมายถึง ให้กดปุ่มคอนโทรลค้างไว้ แล้วกดปุ่ม f 13 ,TKARB06V1'(B ,Tc0Ki1!40;Xh1A$M9b7CE0$i1R'd0Gi1(B ,Ta0Ei1G!40;Xh1A(B f
14 <<Blank lines inserted here by startup of help-with-tutorial>> 14 <<Blank lines inserted here by startup of help-with-tutorial>>
15 >> ตอนนี้ขอให้ลองกด C-v (View Next Screen ดูหน้าต่อไป) ดู เพื่อเลื่อนไปอ่านหน้า 15 >> ,T5M909Ui1"Mc0Ki1EM'!4(B C-v (View Next Screen 0,T4Y1K09i1R05h1Md;(B) 0,T4Y1(B ,T`0>Wh1M`0EWh1M9d;0Mh1R9K09i1R(B
16 ต่อไป 16 0,T5h1Md;(B
17 ต่อจากนี้เป็นต้นไป ทุกครั้งที่อ่านหน้าหนึ่ง ๆ จบขอให้ทำในทำนองเดียวกัน เพื่อเลื่อนไป 17 0,T5h1M(R!09Ui1`0;g1905i19d;(B 0,T7X1!$0CQi1'07Uh10Mh1R9K09i1RK09Vh1'(B ,Tf(B ,T(:"Mc0Ki17Sc97S9M'`04U1BG0!Q19(B ,T`0>Wh1M`0EWh1M9d;(B
18 ดูหน้าต่อไป 18 0,T4Y1K09i1R05h1Md;(B
19 19
20 ESC <ตัวอักษร> หมายถึง ให้กดปุ่ม ESC แล้วปล่อย หลังจากนั้นจึงกดปุ่ม <ตัวอักษร> ตาม 20 ESC <0,T5Q1G0MQ1!IC(B> ,TKARB06V1'(B ,Tc0Ki1!40;Xh1A(B ESC ,Ta0Ei1G;0Eh1MB(B ,TK0EQ1'(R!09Qi190(V1'!40;Xh1A(B <0,T5Q1G0MQ1!IC(B> ,T5RA(B
21 21
22 หมายเหตุ: <ตัวอักษร> ไม่ว่าเป็นตัวใหญ่หรือตัวเล็ก จะให้ความหมายเหมือนกันเมื่อถูกใช้ใน 22 ,TKARB`K05X1(B: <0,T5Q1G0MQ1!IC(B> ,Td0Ah10Gh1R`0;g1905Q1GcK0-h1K0CW1M05Q1G`0Eg1!(B ,T(Pc0Ki1$GRAKARB`K0AW1M90!Q19`0AWh1M06Y1!c0*i1c9(B
23 คำสั่ง ถ้าหากมีปุ่ม META ให้กด ก็จะสามารถใช้การกด M-<ตัวอักษร> แทน 23 ,T$S0JQh1'(B 0,T6i1RKR!0AU10;Xh1A(B META ,Tc0Ki1!4(B 0,T!g1(PJRARC6c0*i1!RC!4(B M-<0,T5Q1G0MQ1!IC(B> ,Ta79(B
24 การ ESC <ตัวอักษร> ได้ (คือให้กดปุ่ม META ค้างไว้ แล้วจึงกด <ตัวอักษร>) 24 ,T!RC(B ESC <0,T5Q1G0MQ1!IC(B> ,Td04i1(B (0,T$W1Mc0Ki1!40;Xh1A(B META 0,T$i1R'd0Gi1(B ,Ta0Ei1G0(V1'!4(B <0,T5Q1G0MQ1!IC(B>)
25 25
26 ข้อสำคัญ: เวลาจะเลิกใช้ Emacs ให้กด C-x C-c หรือในกรณีที่สั่ง Emacs จาก csh 26 0,T"i1MJS0$Q1-(B: ,T`GER(P`0ET1!c0*i1(B Emacs ,Tc0Ki1!4(B C-x C-c ,TK0CW1Mc9!C03U107Uh10JQh1'(B Emacs ,T(R!(B csh
27 ก็สามารถใช้ suspend (หยุดชั่วคราว) ได้ การ suspend Emacs ทำได้โดย 27 0,T!g1JRARC6c0*i1(B suspend (,TK0BX140*Qh1G$CRG(B) ,Td04i1(B ,T!RC(B suspend Emacs ,T7Sd04i1b4B(B
28 กด C-z 28 ,T!4(B C-z
29 29
30 ต่อจากนี้ ขอให้ป้อนคำสั่ง C-v ทุก ๆ ครั้งที่อ่านจบหนึ่งหน้า 30 0,T5h1M(R!09Ui1(B ,T"Mc0Ki10;i1M9$S0JQh1'(B C-v 0,T7X1!(B ,Tf(B ,T$0CQi1'07Uh10Mh1R9(:K09Vh1'K09i1R(B
31 31
32 ภายในหน้าที่แล้วกับหน้าถัดไป จะมีเนื้อหาซ้ำกันอยู่บางบรรทัด ที่เป็นเช่นนี้ ก็เพื่อให้สามารถรู้ 32 ,T@RBc9K09i1R07Uh1a0Ei1G0!Q1:K09i1R06Q14d;(B ,T(P0AU1`09Wi1MKR0+i1S0!Q19M0BYh1:R':CC07Q14(B 0,T7Uh1`0;g19`0*h1909Ui1(B 0,T!g1`0>Wh1Mc0Ki1JRARC60CYi1(B
33 ได้ว่า เนื้อหาที่แสดงอยู่นั้น ต่อเนื่องกันอยู่ 33 ,Td04i10Gh1R(B ,T`09Wi1MKR07Uh1aJ4'M0BYh109Qi19(B 0,T5h1M`09Wh1M'0!Q19M0BYh1(B
34 34
35 35
36 ก่อนอื่น จำเป็นจะต้องรู้วิธีการโยกย้ายตำแหน่งไปมา ภายในแฟ้มข้อมูลเสียก่อน ตามที่บอกไป 36 0,T!h1M90MWh19(B ,T(S`0;g19(P05i1M'0CYi10GT108U1!RCbB!0Bi1RB5SaK09h1'd;AR(B ,T@RBc9a0?i1A0"i1M0AY1E`0JU1B0!h1M9(B ,T5RA07Uh1:M!d;(B
37 แล้ว ก็คือ C-v ใช้สำหรับเลื่อนไปข้างหน้า ถ้าจะเลื่อนกลับที่เก่า ก็ให้กด ESC v 37 ,Ta0Ei1G(B 0,T!g10$W1M(B C-v ,Tc0*i1JSK0CQ1:`0EWh1M9d;0"i1R'K09i1R(B 0,T6i1R(P`0EWh1M9!0EQ1:07Uh1`0!h1R(B 0,T!g1c0Ki1!4(B ESC v
38 38
39 >> ลองใช้ ESC v และ C-v เพื่อเลื่อนไปมาดู สักสองสามครั้ง 39 >> ,TEM'c0*i1(B ESC v ,TaEP(B C-v ,T`0>Wh1M`0EWh1M9d;AR04Y1(B 0,TJQ1!JM'JRA$0CQi1'(B
40 40
41 สรุป 41 ,TJ0CX1;(B
42 === 42 ===
43 คำสั่ง สำหรับเลื่อนไปมาทีละหน้าภายในแฟ้มข้อมูล คือ 43 ,T$S0JQh1'(B ,TJSK0CQ1:`0EWh1M9d;AR07U1EPK09i1R@RBc9a0?i1A0"i1M0AY1E(B 0,T$W1M(B
44 44
45 C-v เลื่อนไปข้างหน้า หนึ่งหน้าจอ 45 C-v ,T`0EWh1M9d;0"i1R'K09i1R(B ,TK09Vh1'K09i1R(M(B
46 ESC v เลื่อนไปข้างหลัง หนึ่งหน้าจอ 46 ESC v ,T`0EWh1M9d;0"i1R'K0EQ1'(B ,TK09Vh1'K09i1R(M(B
47 C-l เขียนหน้าจอใหม่ และในขณะเดียวกัน ก็ให้เลื่อนตำแหน่งของเคอร์เซอร์ (cursor) 47 C-l ,T`0"U1B9K09i1R(McK0Ah1(B ,TaEPc9"3P`04U1BG0!Q19(B 0,T!g1c0Ki1`0EWh1M95SaK09h1'"M'`$M0Cl1`+M0Cl1(B (cursor)
48 ไปอยู่ตรงกลางจอ 48 ,Td;M0BYh15C'!ER'(M(B
49 49
50 >> ขอให้สังเกตดูว่า ในขณะนี้เคอร์เซอร์อยู่ที่ไหน พร้อมทั้งจำข้อความที่อยู่รอบข้างของ 50 >> ,T"Mc0Ki10JQ1'`!504Y10Gh1R(B ,Tc9"3P09Ui1`$M0Cl1`+M0Cl1M0BYh107Uh1dK9(B ,T>0Ci1MA07Qi1'(S0"i1M$GRA07Uh1M0BYh1CM:0"i1R'"M'(B
51 เคอร์เซอร์ด้วย แล้วลองกด C-l ดู ตรวจสอบดูว่า เคอร์เซอร์เลื่อนไปอยู่ที่ไหน 51 ,T`$M0Cl1`+M0Cl104i1GB(B ,Ta0Ei1GEM'!4(B C-l 0,T4Y1(B ,T5CG(JM:04Y10Gh1R(B ,T`$M0Cl1`+M0Cl1`0EWh1M9d;M0BYh107Uh1dK9(B
52 ข้อความที่อยู่รอบข้างเปลี่ยนไปอย่างไร 52 0,T"i1M$GRA07Uh1M0BYh1CM:0"i1R'`;0EUh1B9d;M0Bh1R'dC(B
53 53
54 วิธีโยกย้ายเคอร์เซอร์ขั้นพื้นฐาน 54 0,TGT108U1bB!0Bi1RB`$M0Cl1`+M0Cl10"Qi190>Wi190R9(B
55 ======================= 55 =======================
56 56
57 ตอนนี้ เราก็รู้วิธีโยกย้ายไปมาแบบทีละหน้าแล้ว ต่อไป ก็มาเรียนรู้วิธีโยกย้ายไปที่ตำแหน่งใด 57 ,T5M909Ui1(B ,T`CR0!g10CYi10GT108U1bB!0Bi1RBd;ARa::07U1EPK09i1Ra0Ei1G(B 0,T5h1Md;(B 0,T!g1AR`0CU1B90CYi10GT108U1bB!0Bi1RBd;07Uh15SaK09h1'c4(B
58 ตำแหน่งหนึ่งภายในหน้าเดียวกัน ซึ่งสามารถทำได้หลายวิธี วิธีหนึ่งก็คือให้ใช้คำสั่ง ไปบรรทัดก่อนหน้า 58 ,T5SaK09h1'K09Vh1'@RBc9K09i1R`04U1BG0!Q19(B 0,T+Vh1'JRARC67Sd04i1KERB0GT108U1(B 0,TGT108U1K09Vh1'0!g10$W1Mc0Ki1c0*i1$S0JQh1'(B ,Td;:CC07Q140!h1M9K09i1R(B
59 (previous) ไปบรรทัดต่อไป (next) ไปด้านหน้า (forward) ไปด้านหลัง (backward) คำสั่ง 59 (previous) ,Td;:CC07Q1405h1Md;(B (next) ,Td;04i1R9K09i1R(B (forward) ,Td;04i1R9K0EQ1'(B (backward) ,T$S0JQh1'(B
60 เหล่านี้ ถูกตั้งไว้ที่ C-p C-n C-f และ C-b ตามลำดับ ซึ่งจะทำให้โยกย้ายไปมาได้ โดยเทียบกับ 60 ,T`K0Eh1R09Ui1(B 0,T6Y1!05Qi1'd0Gi107Uh1(B C-p C-n C-f ,TaEP(B C-b ,T5RAES04Q1:(B 0,T+Vh1'(P7Sc0Ki1bB!0Bi1RBd;ARd04i1(B ,Tb4B`07U1B:0!Q1:(B
61 ตำแหน่งปัจจุบัน สรุปเขียนเป็นแผนภาพได้ดังนี้ 61 ,T5SaK09h1'0;Q1(0(X10:Q19(B ,TJ0CX1;`0"U1B9`0;g19a<9@R>d04i104Q1'09Ui1(B
62 62
63 63
64 บรรทัดที่แล้ว C-p 64 ,T:CC07Q1407Uh1a0Ei1G(B C-p
65 : 65 :
66 : 66 :
67 ตัวอักษรด้านหลัง C-b .... ตำแหน่งเคอร์เซอร์ปัจจุบัน .... ตัวอักษรด้านหน้า C-f 67 0,T5Q1G0MQ1!IC04i1R9K0EQ1'(B C-b .... ,T5SaK09h1'`$M0Cl1`+M0Cl10;Q1(0(X10:Q19(B .... 0,T5Q1G0MQ1!IC04i1R9K09i1R(B C-f
68 : 68 :
69 : 69 :
70 บรรทัดต่อไป C-n 70 ,T:CC07Q1405h1Md;(B C-n
71 71
72 72
73 คำสั่งเหล่านี้ เอามาจากตัวอักษรตัวแรกของ คำว่า Previous Next Backward Forward 73 ,T$S0JQh1'`K0Eh1R09Ui1(B ,T`MRAR(R!05Q1G0MQ1!IC05Q1GaC!"M'(B ,T$S0Gh1R(B Previous Next Backward Forward
74 ซึ่งจะช่วยให้จำได้ไม่ยาก คำสั่งเหล่านี้เป็นคำสั่งสำหรับการโยกย้ายขั้นพื้นฐาน ซึ่งต้องใช้อยู่เสมอ 74 0,T+Vh1'(P0*h1GBc0Ki1(Sd04i1d0Ah1BR!(B ,T$S0JQh1'`K0Eh1R09Ui1`0;g19$S0JQh1'JSK0CQ1:!RCbB!0Bi1RB0"Qi190>Wi190R9(B 0,T+Vh1'05i1M'c0*i1M0BYh1`JAM(B
75 75
76 >> ลองกด C-n ดูหลาย ๆ ครั้ง เพื่อเลื่อนเคอร์เซอร์มายังบรรทัดนี้ (บรรทัดที่กำลังอ่าน 76 >> ,TEM'!4(B C-n 0,T4Y1KERB(B ,Tf(B ,T$0CQi1'(B ,T`0>Wh1M`0EWh1M9`$M0Cl1`+M0Cl1AR0BQ1':CC07Q1409Ui1(B (,T:CC07Q1407Uh1!S0EQ1'0Mh1R9(B
77 อยู่นี้) 77 ,TM0BYh109Ui1(B)
78 78
79 >> ลองกด C-f ดูหลาย ๆ ครั้ง เพื่อเลื่อนเคอร์เซอร์ไปยังตรงกลางของบรรทัด แล้วลอง 79 >> ,TEM'!4(B C-f 0,T4Y1KERB(B ,Tf(B ,T$0CQi1'(B ,T`0>Wh1M`0EWh1M9`$M0Cl1`+M0Cl1d;0BQ1'5C'!ER'"M':CC07Q14(B ,Ta0Ei1GEM'(B
80 กด C-p เลื่อนขึ้นข้างบนดู สังเกตดูด้วยว่า ตำแหน่งของเคอร์เซอร์เปลี่ยนไปอย่างไร 80 ,T!4(B C-p ,T`0EWh1M90"Vi190"i1R':904Y1(B 0,TJQ1'`!504Y104i1GB0Gh1R(B ,T5SaK09h1'"M'`$M0Cl1`+M0Cl1`;0EUh1B9d;M0Bh1R'dC(B
81 81
82 >> ลองกด C-b ขณะที่อยู่ที่ตำแหน่งหน้าสุดของบรรทัดดู สังเกตดูด้วยว่า เคอร์เซอร์เคลื่อน 82 >> ,TEM'!4(B C-b ,T"3P07Uh1M0BYh107Uh15SaK09h1'K09i1R0JX14"M':CC07Q1404Y1(B 0,TJQ1'`!504Y104i1GB0Gh1R(B ,T`$M0Cl1`+M0Cl1`$0EWh1M9(B
83 ไปอย่างไร จากนั้นให้กด C-b อีกสองสามครั้ง แล้วกด C-f เพื่อเลื่อนไปยังท้ายสุด 83 ,Td;M0Bh1R'dC(B ,T(R!09Qi19c0Ki1!4(B C-b 0,TMU1!JM'JRA$0CQi1'(B ,Ta0Ei1G!4(B C-f ,T`0>Wh1M`0EWh1M9d;0BQ1'07i1RB0JX14(B
84 ของบรรทัดดู เคอร์เซอร์จะเป็นอย่างไร ถ้ากดจนเลยท้ายบรรทัดไป 84 ,T"M':CC07Q1404Y1(B ,T`$M0Cl1`+M0Cl1(P`0;g19M0Bh1R'dC(B 0,T6i1R!4(9`EB07i1RB:CC07Q14d;(B
85 85
86 86
87 เวลาที่เลื่อนเคอร์เซอร์ จนเลยบรรทัดแรกสุดหรือบรรทัดท้ายสุดของหน้าไป เคอร์เซอร์จะ 87 ,T`GER07Uh1`0EWh1M9`$M0Cl1`+M0Cl1(B ,T(9`EB:CC07Q14aC!0JX14K0CW1M:CC07Q1407i1RB0JX14"M'K09i1Rd;(B ,T`$M0Cl1`+M0Cl1(P(B
88 เลื่อนไปยังบรรทัดต่อไปในทิศทางนั้น ๆ และปรับให้เคอร์เซอร์กลับมาอยู่บนหน้าจอเสมอ 88 ,T`0EWh1M9d;0BQ1':CC07Q1405h1Md;c907T1H7R'09Qi19(B ,Tf(B ,TaEP;0CQ1:c0Ki1`$M0Cl1`+M0Cl1!0EQ1:ARM0BYh1:9K09i1R(M`JAM(B
89 89
90 >> ลองกด C-n เพื่อเลื่อนเคอร์เซอร์ให้เลยบรรทัดล่างสุดของหน้าจอดู แล้วสังเกตดูว่า 90 >> ,TEM'!4(B C-n ,T`0>Wh1M`0EWh1M9`$M0Cl1`+M0Cl1c0Ki1`EB:CC07Q140Eh1R'0JX14"M'K09i1R(M04Y1(B ,Ta0Ei1G0JQ1'`!504Y10Gh1R(B
91 เกิดอะไรขึ้น และตำแหน่งของเคอร์เซอร์เปลี่ยนไปอย่างไร 91 ,T`0!T14MPdC0"Vi19(B ,TaEP5SaK09h1'"M'`$M0Cl1`+M0Cl1`;0EUh1B9d;M0Bh1R'dC(B
92 92
93 ถ้ารู้สึกว่าการขยับไปทีละตัวอักษรนั้นอืดอาดยืดยาด ก็สามารถใช้การเลื่อนเคอร์เซอร์ไปทีละคำ 93 0,T6i1R0CYi10JV1!0Gh1R!RC"0BQ1:d;07U1EP05Q1G0MQ1!IC09Qi190MW14MR40BW14BR4(B 0,T!g1JRARC6c0*i1!RC`0EWh1M9`$M0Cl1`+M0Cl1d;07U1EP$S(B
94 ได้ กด ESC f เพื่อให้เลื่อนไปข้างหน้าหนึ่งคำ และ ESC b เพื่อให้เลื่อนไปข้างหลังหนึ่งคำ 94 ,Td04i1(B ,T!4(B ESC f ,T`0>Wh1Mc0Ki1`0EWh1M9d;0"i1R'K09i1RK09Vh1'$S(B ,TaEP(B ESC b ,T`0>Wh1Mc0Ki1`0EWh1M9d;0"i1R'K0EQ1'K09Vh1'$S(B
95 95
96 หมายเหตุ: สำหรับภาษาไทย ยังไม่สามารถแบ่งแยกตำแหน่งของคำได้ถูกต้อง จึงไม่ 96 ,TKARB`K05X1(B: ,TJSK0CQ1:@RIRd7B(B 0,TBQ1'd0Ah1JRARC6a0:h1'aB!5SaK09h1'"M'$Sd04i106Y1!05i1M'(B 0,T(V1'd0Ah1(B
97 สามารถใช้สองคำสั่งนี้ได้ 97 ,TJRARC6c0*i1JM'$S0JQh1'09Ui1d04i1(B
98 98
99 >> ลองกด ESC f และ ESC b ลองดูหลาย ๆ ครั้ง และลองใช้ร่วมกับ C-f กับ C-b ดู 99 >> ,TEM'!4(B ESC f ,TaEP(B ESC b ,TEM'04Y1KERB(B ,Tf(B ,T$0CQi1'(B ,TaEPEM'c0*i10Ch1GA0!Q1:(B C-f 0,T!Q1:(B C-b 0,T4Y1(B
100 ด้วย 100 0,T4i1GB(B
101 101
102 จะสังเกตเห็นได้ว่า ESC f และ ESC b มีรูปแบบคล้ายคลึงกับ C-f และ C-b โดยส่วนใหญ่ 102 ,T(P0JQ1'`!5`0Kg19d04i10Gh1R(B ESC f ,TaEP(B ESC b 0,TAU10CY1;a::$0Ei1RB$0EV1'0!Q1:(B C-f ,TaEP(B C-b ,Tb4B0Jh1G9cK0-h1(B
103 ESC <ตัวอักษร> จะใช้เกี่ยวกับการจัดการข้อความ ส่วน C-<ตัวอักษร> จะใช้กับสิ่งที่เป็นพื้นฐานมาก 103 ESC <0,T5Q1G0MQ1!IC(B> ,T(Pc0*i1`0!Uh1BG0!Q1:!RC0(Q14!RC0"i1M$GRA(B 0,TJh1G9(B C-<0,T5Q1G0MQ1!IC(B> ,T(Pc0*i10!Q1:0JTh1'07Uh1`0;g190>Wi190R9AR!(B
104 กว่า (เช่น ตัวอักษร หรือ บรรทัด) 104 ,T!0Gh1R(B (,T`0*h19(B 0,T5Q1G0MQ1!IC(B ,TK0CW1M(B ,T:CC07Q14(B)
105 105
106 C-a กับ C-e เป็นคำสั่งน่าจะรู้ไว้ เพราะค่อนข้างสะดวกดีทีเดียว C-a ใช้สำหรับเลื่อน 106 C-a 0,T!Q1:(B C-e ,T`0;g19$S0JQh1'09h1R(P0CYi1d0Gi1(B ,T`>CRP0$h1M90"i1R'JP4G!04U107U1`04U1BG(B C-a ,Tc0*i1JSK0CQ1:`0EWh1M9(B
107 เคอร์เซอร์ไปที่ตำแหน่งหน้าสุดของบรรทัด C-e สำหรับเลื่อนไปที่ตำแหน่งท้ายสุดของบรรทัด 107 ,T`$M0Cl1`+M0Cl1d;07Uh15SaK09h1'K09i1R0JX14"M':CC07Q14(B C-e ,TJSK0CQ1:`0EWh1M9d;07Uh15SaK09h1'07i1RB0JX14"M':CC07Q14(B
108 108
109 109
110 >> ลองกด C-a ดูสองครั้ง หลังจากนั้นให้กด C-e ดูสองครั้ง แล้วลองสังเกตดูว่า การ 110 >> ,TEM'!4(B C-a 0,T4Y1JM'$0CQi1'(B ,TK0EQ1'(R!09Qi19c0Ki1!4(B C-e 0,T4Y1JM'$0CQi1'(B ,Ta0Ei1GEM'0JQ1'`!504Y10Gh1R(B ,T!RC(B
111 กดคำสั่งนี้มากกว่าสองครั้ง จะไม่ช่วยให้เลื่อนเคอร์เซอร์ไปไหนได้มากกว่านั้นอีก 111 ,T!4$S0JQh1'09Ui1AR!!0Gh1RJM'$0CQi1'(B ,T(Pd0Ah10*h1GBc0Ki1`0EWh1M9`$M0Cl1`+M0Cl1d;dK9d04i1AR!!0Gh1R09Qi190MU1!(B
112 112
113 ยังมีอีกสองคำสั่ง สำหรับการเลื่อนเคอร์เซอร์แบบง่าย ๆ คือ คำสั่ง ESC < สำหรับการเลื่อน 113 0,TBQ1'0AU10MU1!JM'$S0JQh1'(B ,TJSK0CQ1:!RC`0EWh1M9`$M0Cl1`+M0Cl1a::0'h1RB(B ,Tf(B 0,T$W1M(B ,T$S0JQh1'(B ESC < ,TJSK0CQ1:!RC`0EWh1M9(B
114 เคอร์เซอร์ไปที่ตำแหน่งแรกสุดของแฟ้มข้อมูล และคำสั่ง ESC > สำหรับการเลื่อนไปตำแหน่งท้ายสุด 114 ,T`$M0Cl1`+M0Cl1d;07Uh15SaK09h1'aC!0JX14"M'a0?i1A0"i1M0AY1E(B ,TaEP$S0JQh1'(B ESC > ,TJSK0CQ1:!RC`0EWh1M9d;5SaK09h1'07i1RB0JX14(B
115 115
116 เราเรียกตำแหน่งของข้อความ ที่มีเคอร์เซอร์อยู่ว่า "จุด (point)" หรือพูดอีกอย่างหนึ่งได้ 116 ,T`CR`0CU1B!5SaK09h1'"M'0"i1M$GRA(B 0,T7Uh10AU1`$M0Cl1`+M0Cl1M0BYh10Gh1R(B "0,T(X14(B (point)" ,TK0CW1M0>Y140MU1!M0Bh1R'K09Vh1'd04i1(B
117 ว่า เคอร์เซอร์ เป็นสิ่งที่บอกให้เรารู้ว่า จุด อยู่ตรงไหนของหน้าจอ 117 0,TGh1R(B ,T`$M0Cl1`+M0Cl1(B ,T`0;g190JTh1'07Uh1:M!c0Ki1`CR0CYi10Gh1R(B 0,T(X14(B ,TM0BYh15C'dK9"M'K09i1R(M(B
118 118
119 สรุปคำสั่งสำหรับการเคลื่อนไปมา ซึ่งรวมการเคลื่อนที่ในหน่วยของคำ หน่วยของบรรทัดไว้ด้วย 119 ,TJ0CX1;$S0JQh1'JSK0CQ1:!RC`$0EWh1M9d;AR(B 0,T+Vh1'CGA!RC`$0EWh1M907Uh1c9K09h1GB"M'$S(B ,TK09h1GB"M':CC07Q14d0Gi104i1GB(B
120 ได้ดังนี้ 120 ,Td04i104Q1'09Ui1(B
121 121
122 C-f ไปข้างหน้าหนึ่งตัวอักษร 122 C-f ,Td;0"i1R'K09i1RK09Vh1'05Q1G0MQ1!IC(B
123 C-b กลับข้างหลังหนึ่งตัวอักษร 123 C-b ,T!0EQ1:0"i1R'K0EQ1'K09Vh1'05Q1G0MQ1!IC(B
124 124
125 ESC f ไปข้างหน้าหนึ่งคำ 125 ESC f ,Td;0"i1R'K09i1RK09Vh1'$S(B
126 ESC b กลับข้างหลังหนึ่งคำ 126 ESC b ,T!0EQ1:0"i1R'K0EQ1'K09Vh1'$S(B
127 127
128 C-n เลื่อนไปบรรทัดต่อไป 128 C-n ,T`0EWh1M9d;:CC07Q1405h1Md;(B
129 C-p เลื่อนไปบรรทัดที่แล้ว 129 C-p ,T`0EWh1M9d;:CC07Q1407Uh1a0Ei1G(B
130 130
131 ESC ] เลื่อนไปตำแหน่งท้ายสุดของย่อหน้า (paragraph) 131 ESC ] ,T`0EWh1M9d;5SaK09h1'07i1RB0JX14"M'0Bh1MK09i1R(B (paragraph)
132 ESC [ เลื่อนไปตำแหน่งแรกสุดของย่อหน้า 132 ESC [ ,T`0EWh1M9d;5SaK09h1'aC!0JX14"M'0Bh1MK09i1R(B
133 133
134 C-a เลื่อนไปตำแหน่งแรกสุดของบรรทัด 134 C-a ,T`0EWh1M9d;5SaK09h1'aC!0JX14"M':CC07Q14(B
135 C-e เลื่อนไปตำแหน่งท้ายสุดของบรรทัด 135 C-e ,T`0EWh1M9d;5SaK09h1'07i1RB0JX14"M':CC07Q14(B
136 136
137 ESC < เลื่อนไปตำแหน่งแรกสุดของแฟ้มข้อมูล 137 ESC < ,T`0EWh1M9d;5SaK09h1'aC!0JX14"M'a0?i1A0"i1M0AY1E(B
138 ESC > เลื่อนไปตำแหน่งท้ายสุดของแฟ้มข้อมูล 138 ESC > ,T`0EWh1M9d;5SaK09h1'07i1RB0JX14"M'a0?i1A0"i1M0AY1E(B
139 139
140 >> ลองใช้คำสั่งแต่ละคำสั่งดู คำสั่งเหล่านี้เป็นคำสั่งที่ใช้กันบ่อยสุด คำสั่งสองคำสั่งหลัง 140 >> ,TEM'c0*i1$S0JQh1'a05h1EP$S0JQh1'04Y1(B ,T$S0JQh1'`K0Eh1R09Ui1`0;g19$S0JQh1'07Uh1c0*i10!Q190:h1MB0JX14(B ,T$S0JQh1'JM'$S0JQh1'K0EQ1'(B
141 จะเลื่อนเคอร์เซอร์ ไปยังที่ที่ค่อนข้างไกล ให้ลองใช้คำสั่ง C-v และ ESC v เพื่อ 141 ,T(P`0EWh1M9`$M0Cl1`+M0Cl1(B ,Td;0BQ1'07Uh107Uh10$h1M90"i1R'd!E(B ,Tc0Ki1EM'c0*i1$S0JQh1'(B C-v ,TaEP(B ESC v ,T`0>Wh1M(B
142 เลื่อนเคอร์เซอร์กลับมาที่ตรงนี้ 142 ,T`0EWh1M9`$M0Cl1`+M0Cl1!0EQ1:AR07Uh15C'09Ui1(B
143 143
144 สำหรับคำสั่งอื่น ๆ ของ Emacs ก็เช่นกัน คำสั่งเหล่านี้จะสามารถเพิ่มตัวเลือก (argument) 144 ,TJSK0CQ1:$S0JQh1'0MWh19(B ,Tf(B ,T"M'(B Emacs 0,T!g1`0*h190!Q19(B ,T$S0JQh1'`K0Eh1R09Ui1(PJRARC6`0>Th1A05Q1G`0EW1M!(B (argument)
145 เพื่อกำหนด จำนวนครั้ง ในการปฏิบัติงานได้ การกำหนดจำนวนครั้ง ทำได้โดยกด C-u แล้วตาม 145 ,T`0>Wh1M!SK94(B ,T(S9G9$0CQi1'(B ,Tc9!RC;0/T10:Q105T1'R9d04i1(B ,T!RC!SK94(S9G9$0CQi1'(B ,T7Sd04i1b4B!4(B C-u ,Ta0Ei1G5RA(B
146 ด้วยจำนวนครั้งที่ต้องการก่อน แล้วจึงค่อยกดคำสั่งตาม 146 0,T4i1GB(S9G9$0CQi1'07Uh105i1M'!RC0!h1M9(B ,Ta0Ei1G0(V1'0$h1MB!4$S0JQh1'5RA(B
147 147
148 ตัวอย่างเช่น คำสั่ง C-u 8 C-f หมายถึง ให้เลื่อนไปข้างหน้า 8 ตัวอักษร 148 0,T5Q1GM0Bh1R'`0*h19(B ,T$S0JQh1'(B C-u 8 C-f ,TKARB06V1'(B ,Tc0Ki1`0EWh1M9d;0"i1R'K09i1R(B 8 0,T5Q1G0MQ1!IC(B
149 149
150 >> ให้ลองกำหนดจำนวนครั้งที่เหมาะสมสำหรับคำสั่ง C-n หรือ C-p เพื่อเลื่อนเคอร์เซอร์ 150 >> ,Tc0Ki1EM'!SK94(S9G9$0CQi1'07Uh1`KARPJAJSK0CQ1:$S0JQh1'(B C-n ,TK0CW1M(B C-p ,T`0>Wh1M`0EWh1M9`$M0Cl1`+M0Cl1(B
151 ให้มาอยู่ใกล้บรรทัดนี้ให้มากที่สุดเท่าที่จะทำได้ ในการเลื่อนเคอร์เซอร์ครั้งเดียว 151 ,Tc0Ki1ARM0BYh1c!0Ei1:CC07Q1409Ui1c0Ki1AR!07Uh10JX14`07h1R07Uh1(P7Sd04i1(B ,Tc9!RC`0EWh1M9`$M0Cl1`+M0Cl1$0CQi1'`04U1BG(B
152 152
153 สำหรับ C-v และ ESC v จะได้ผลแตกต่างไปสักเล็กน้อย ในกรณีนี้ จะเป็นการเลื่อนหน้าจอ 153 ,TJSK0CQ1:(B C-v ,TaEP(B ESC v ,T(Pd04i1<Ea5!05h1R'd;0JQ1!`0Eg1!09i1MB(B ,Tc9!C03U109Ui1(B ,T(P`0;g19!RC`0EWh1M9K09i1R(M(B
154 ขึ้นลง ตามจำนวนบรรทัดแทน 154 0,T"Vi19E'(B ,T5RA(S9G9:CC07Q14a79(B
155 155
156 >> ลองกด C-u 3 C-v ดู 156 >> ,TEM'!4(B C-u 3 C-v 0,T4Y1(B
157 157
158 เลื่อนกลับที่เก่าได้โดย C-u 3 ESC v 158 ,T`0EWh1M9!0EQ1:07Uh1`0!h1Rd04i1b4B(B C-u 3 ESC v
159 159
160 คำสั่งยกเลิก 160 ,T$S0JQh1'B!`0ET1!(B
161 ========= 161 =========
162 162
163 คำสั่ง C-g ใช้สำหรับสั่งยกเลิกคำสั่งต่าง ๆ ที่ต้องการการป้อนข้อมูลเพิ่มเติม ตัวอย่างเช่น 163 ,T$S0JQh1'(B C-g ,Tc0*i1JSK0CQ1:0JQh1'B!`0ET1!$S0JQh1'05h1R'(B ,Tf(B 0,T7Uh105i1M'!RC!RC0;i1M90"i1M0AY1E`0>Th1A`05T1A(B 0,T5Q1GM0Bh1R'`0*h19(B
164 ระหว่างที่ใส่ตัวเลือก (argument) อยู่ หรือระหว่างคำสั่งที่ต้องการกดปุ่มมากกว่า 2 ปุ่มขึ้นไป ถ้า 164 ,TCPK0Gh1R'07Uh1c0Jh105Q1G`0EW1M!(B (argument) ,TM0BYh1(B ,TK0CW1MCPK0Gh1R'$S0JQh1'07Uh105i1M'!RC!40;Xh1AAR!!0Gh1R(B 2 0,T;Xh1A0"Vi19d;(B 0,T6i1R(B
165 หากต้องการยกเลิก ก็ให้กด C-g 165 ,TKR!05i1M'!RCB!`0ET1!(B 0,T!g1c0Ki1!4(B C-g
166 166
167 >> ลองกำหนดจำนวนครั้งให้เป็น 100 โดยการกด C-u 100 แล้วกด C-g ดู หลังจากนั้น 167 >> ,TEM'!SK94(S9G9$0CQi1'c0Ki1`0;g19(B 100 ,Tb4B!RC!4(B C-u 100 ,Ta0Ei1G!4(B C-g 0,T4Y1(B ,TK0EQ1'(R!09Qi19(B
168 ให้ลองกด C-f ดู แล้วสังเกตดูว่าเคอร์เซอร์เลื่อนไปกี่ตัวอักษร หรือตอนที่พลาดไปกด 168 ,Tc0Ki1EM'!4(B C-f 0,T4Y1(B ,Ta0Ei1G0JQ1'`!504Y10Gh1R`$M0Cl1`+M0Cl1`0EWh1M9d;0!Uh105Q1G0MQ1!IC(B ,TK0CW1M5M907Uh1>ER4d;!4(B
169 ESC โดยไม่ตั้งใจ ก็สามารถกด C-g ยกเลิกได้ 169 ESC ,Tb4Bd0Ah105Qi1'c((B 0,T!g1JRARC6!4(B C-g ,TB!`0ET1!d04i1(B
170 170
171 ข้อผิดพลาด (Error) 171 0,T"i1M0<T14>ER4(B (Error)
172 ================ 172 ================
173 173
174 ในบางครั้ง อาจจะมีการสั่งปฏิบัติงานบางอย่าง ที่ Emacs ยอมรับไม่ได้เกิดขึ้น ตัวอย่างเช่น 174 ,Tc9:R'$0CQi1'(B ,TMR((P0AU1!RC0JQh1';0/T10:Q105T1'R9:R'M0Bh1R'(B 0,T7Uh1(B Emacs ,TBMA0CQ1:d0Ah1d04i1`0!T140"Vi19(B 0,T5Q1GM0Bh1R'`0*h19(B
175 การกดคำสั่งคอนโทรลบางคำสั่ง ที่ไม่ได้กำหนดไว้ใน Emacs ก็จะทำให้ Emacs ส่งเสียงเตือน 175 ,T!RC!4$S0JQh1'$M9b7CE:R'$S0JQh1'(B 0,T7Uh1d0Ah1d04i1!SK94d0Gi1c9(B Emacs 0,T!g1(P7Sc0Ki1(B Emacs 0,TJh1'`0JU1B'`05W1M9(B
176 และแสดงผลที่บรรทัดล่างสุดของจอ บอกว่าผิดพลาดอย่างไร 176 ,TaEPaJ4'<E07Uh1:CC07Q140Eh1R'0JX14"M'(M(B ,T:M!0Gh1R0<T14>ER4M0Bh1R'dC(B
177 177
178 คำสั่งบางคำสั่งที่เขียนไว้ในเอกสารฉบับนี้ อาจใช้ไม่ได้กับ Emacs บางรุ่น (version) ซึ่งจะ 178 ,T$S0JQh1':R'$S0JQh1'07Uh1`0"U1B9d0Gi1c9`M!JRC)0:Q1:09Ui1(B ,TMR(c0*i1d0Ah1d04i10!Q1:(B Emacs ,T:R'0CXh19(B (version) 0,T+Vh1'(P(B
179 ทำให้มีการแสดงผลข้อผิดพลาด (error) ขึ้น ในกรณีนี้ ขอให้กดปุ่มอะไรก็ได้ เพื่อเลื่อนไปยังส่วน 179 ,T7Sc0Ki10AU1!RCaJ4'<E0"i1M0<T14>ER4(B (error) 0,T"Vi19(B ,Tc9!C03U109Ui1(B ,T"Mc0Ki1!40;Xh1AMPdC0!g1d04i1(B ,T`0>Wh1M`0EWh1M9d;0BQ1'0Jh1G9(B
180 ต่อไป 180 0,T5h1Md;(B
181 181
182 วินโดว์ (Window) 182 0,TGT19b40Gl1(B (Window)
183 ============== 183 ==============
184 184
185 Emacs สามารถเปิดวินโดว์ได้พร้อมกันหลายวินโดว์ และใช้วินโดว์เหล่านั้นแสดงผลข้อความ 185 Emacs ,TJRARC6`0;T140GT19b40Gl1d04i1>0Ci1MA0!Q19KERB0GT19b40Gl1(B ,TaEPc0*i10GT19b40Gl1`K0Eh1R09Qi19aJ4'<E0"i1M$GRA(B
186 ต่าง ๆ ตามต้องการได้ ก่อนอื่น ก็ควรจะทำความรู้จักกับคำสั่ง ที่ใช้สำหรับการลบวินโดว์ส่วนเกิน 186 0,T5h1R'(B ,Tf(B ,T5RA05i1M'!RCd04i1(B 0,T!h1M90MWh19(B 0,T!g1$GC(P7S$GRA0CYi10(Q1!0!Q1:$S0JQh1'(B 0,T7Uh1c0*i1JSK0CQ1:!RCE:0GT19b40Gl10Jh1G9`0!T19(B
187 ในเวลาที่แสดงผลลัพธ์ของคำสั่งบางคำสั่ง หรือ Help ออกเสียก่อน 187 ,Tc9`GER07Uh1aJ4'<E0EQ1>08l1"M'$S0JQh1':R'$S0JQh1'(B ,TK0CW1M(B Help ,TMM!`0JU1B0!h1M9(B
188 188
189 C-x 1 ทำให้เป็นวินโดว์เดียว 189 C-x 1 ,T7Sc0Ki1`0;g190GT19b40Gl1`04U1BG(B
190 190
191 คำสั่ง C-x 1 ใช้สำหรับลบวินโดว์อื่น แล้วขยายวินโดว์ที่มีเคอร์เซอร์อยู่ ให้เต็มจอเป็น 191 ,T$S0JQh1'(B C-x 1 ,Tc0*i1JSK0CQ1:E:0GT19b40Gl10MWh19(B ,Ta0Ei1G"BRB0GT19b40Gl107Uh10AU1`$M0Cl1`+M0Cl1M0BYh1(B ,Tc0Ki1`05g1A(M`0;g19(B
192 วินโดว์เดียว 192 0,TGT19b40Gl1`04U1BG(B
193 193
194 >> ให้เลื่อนเคอร์เซอร์มาที่บรรทัดนี้ แล้วกด C-u 0 C-l 194 >> ,Tc0Ki1`0EWh1M9`$M0Cl1`+M0Cl1AR07Uh1:CC07Q1409Ui1(B ,Ta0Ei1G!4(B C-u 0 C-l
195 195
196 >> ลองกด C-h k C-f ดู แล้วสังเกตดูว่าวินโดว์นี้เปลี่ยนไปอย่างไร เมื่อมีวินโดว์ใหม่ซึ่ง 196 >> ,TEM'!4(B C-h k C-f 0,T4Y1(B ,Ta0Ei1G0JQ1'`!504Y10Gh1R0GT19b40Gl109Ui1`;0EUh1B9d;M0Bh1R'dC(B ,T`0AWh1M0AU10GT19b40Gl1cK0Ah10+Vh1'(B
197 อธิบายวิธีใช้คำสั่ง C-f ปรากฏขึ้น 197 ,TM08T1:RB0GT108U1c0*i1$S0JQh1'(B C-f ,T;CR!/0"Vi19(B
198 198
199 >> ลองกด C-x 1 เพื่อลบวินโดว์ที่โผล่ขึ้นมาใหม่ ออก 199 >> ,TEM'!4(B C-x 1 ,T`0>Wh1ME:0GT19b40Gl107Uh1b<0Eh10"Vi19ARcK0Ah1(B ,TMM!(B
200 200
201 การแทรก (insert) และ การลบ (delete) 201 ,T!RCa7C!(B (insert) ,TaEP(B ,T!RCE:(B (delete)
202 =================================== 202 ===================================
203 203
204 บน Emacs เราจะสามารถพิมพ์ตัวอักษรเข้าไปได้เลย เมื่อต้องการพิมพ์ข้อความ Emacs จะ 204 ,T:9(B Emacs ,T`CR(PJRARC60>T1A0>l105Q1G0MQ1!IC`0"i1Rd;d04i1`EB(B ,T`0AWh1M05i1M'!RC0>T1A0>l10"i1M$GRA(B Emacs ,T(P(B
205 ถือว่าตัวหนังสือที่มองเห็นได้ทุกตัว (เช่น 'A' '7' '*' 'ก' และอื่น ๆ) เป็นข้อความที่ต้องการจะ 205 0,T6W1M0Gh1R05Q1GK09Q1'0JW1M07Uh1AM'`0Kg19d04i107X1!05Q1G(B (,T`0*h19(B 'A' '7' '*' ',T!(B' ,TaEP0MWh19(B ,Tf(B) ,T`0;g190"i1M$GRA07Uh105i1M'!RC(P(B
206 แทรก (insert) เข้าไปตรง ๆ เมื่อจะจบบรรทัด ให้กด <Return> เพื่อเติมอักษรขึ้นบรรทัดใหม่ 206 ,Ta7C!(B (insert) ,T`0"i1Rd;5C'(B ,Tf(B ,T`0AWh1M(P(::CC07Q14(B ,Tc0Ki1!4(B <Return> ,T`0>Wh1M`05T1A0MQ1!IC0"Vi19:CC07Q14cK0Ah1(B
207 (linefeed character) แทรกเข้าไป 207 (linefeed character) ,Ta7C!`0"i1Rd;(B
208 208
209 ให้กด <Delete> เมื่อต้องการจะลบตัวอักษรที่เพิ่งพิมพ์เข้าไป <Delete> หมายถึงปุ่มเขียน 209 ,Tc0Ki1!4(B <Delete> ,T`0AWh1M05i1M'!RC(PE:05Q1G0MQ1!IC07Uh1`0>Th1'0>T1A0>l1`0"i1Rd;(B <Delete> ,TKARB06V1'0;Xh1A`0"U1B9(B
210 บนผิวหน้าไว้ว่า "Delete" หรือบางทีอาจจะเขียนไว้ "Rubout" ก็ได้ โดยทั่วไป <Delete> 210 ,T:90<T1GK09i1Rd0Gi10Gh1R(B "Delete" ,TK0CW1M:R'07U1MR((P`0"U1B9d0Gi1(B "Rubout" 0,T!g1d04i1(B ,Tb4B07Qh1Gd;(B <Delete>
211 ใช้สำหรับลบตัวอักษรที่อยู่ก่อนหน้าตำแหน่งเคอร์เซอร์ปัจจุบัน 211 ,Tc0*i1JSK0CQ1:E:05Q1G0MQ1!IC07Uh1M0BYh10!h1M9K09i1R5SaK09h1'`$M0Cl1`+M0Cl10;Q1(0(X10:Q19(B
212 212
213 >> ลองพิมพ์ตัวอักษรเข้าไปหลาย ๆ ตัว แล้วใช้ <Delete> ลบตัวอักษรเหล่านั้นทิ้ง 213 >> ,TEM'0>T1A0>l105Q1G0MQ1!IC`0"i1Rd;KERB(B ,Tf(B 0,T5Q1G(B ,Ta0Ei1Gc0*i1(B <Delete> ,TE:05Q1G0MQ1!IC`K0Eh1R09Qi1907Ti1'(B
214 214
215 >> ลองพิมพ์ข้อความลงไปให้เกินขอบขวา (right margin) เวลาที่พิมพ์ข้อความเข้าไป 215 >> ,TEM'0>T1A0>l10"i1M$GRAE'd;c0Ki1`0!T19"M:"GR(B (right margin) ,T`GER07Uh10>T1A0>l10"i1M$GRA`0"i1Rd;(B
216 ยาวเกินความกว้างของหนึ่งบรรทัด บรรทัดนั้นก็จะ "ถูกต่อ" ให้ยาวเกินหนึ่งหน้าจอ 216 ,TBRG`0!T19$GRA!0Gi1R'"M'K09Vh1':CC07Q14(B ,T:CC07Q1409Qi190!g1(P(B "0,T6Y1!05h1M(B" ,Tc0Ki1BRG`0!T19K09Vh1'K09i1R(M(B
217 โดยใส่เครื่องหมาย '\' ไว้ที่ขอบขวาสุด เพื่อบอกให้รู้ว่าบรรทัดนี้ยังมีต่อ Emacs จะ 217 ,Tb4Bc0Jh1`$0CWh1M'KARB(B '\' ,Td0Gi107Uh1"M:"GR0JX14(B ,T`0>Wh1M:M!c0Ki10CYi10Gh1R:CC07Q1409Ui10BQ1'0AU105h1M(B Emacs ,T(P(B
218 เลื่อน (scroll) หน้าจอเพื่อให้เห็นตำแหน่งที่กำลังแก้ไขอยู่ได้อย่างชัดเจน ถ้าหาก 218 ,T`0EWh1M9(B (scroll) ,TK09i1R(M`0>Wh1Mc0Ki1`0Kg195SaK09h1'07Uh1!S0EQ1'a0!i1d"M0BYh1d04i1M0Bh1R'0*Q14`(9(B 0,T6i1RKR!(B
219 ขอบขวาหรือขอบซ้ายของมีเครื่องหมาย '\' อยู่ ก็เป็นการบอกให้รู้ว่า บรรทัดนั้นยังมีต่อ 219 ,T"M:"GRK0CW1M"M:0+i1RB"M'0AU1`$0CWh1M'KARB(B '\' ,TM0BYh1(B 0,T!g1`0;g19!RC:M!c0Ki10CYi10Gh1R(B ,T:CC07Q1409Qi190BQ1'0AU105h1M(B
220 ไปในทิศทางนั้น ๆ 220 ,Td;c907T1H7R'09Qi19(B ,Tf(B
221 221
222 ลองปฏิบัติดูเลย คงจะช่วยให้เข้าใจง่ายกว่าการอธิบายด้วยตัวหนังสือ 222 ,TEM';0/T10:Q105T104Y1`EB(B ,T$'(P0*h1GBc0Ki1`0"i1Rc(0'h1RB!0Gh1R!RCM08T1:RB04i1GB05Q1GK09Q1'0JW1M(B
223 223
224 >> ให้ขยับเคอร์เซอร์ไปไว้บนบรรทัดซึ่งถูกต่อให้ยาวเกินหนึ่งหน้าจอ ที่เพิ่งป้อนเข้าไปเมื่อ 224 >> ,Tc0Ki1"0BQ1:`$M0Cl1`+M0Cl1d;d0Gi1:9:CC07Q140+Vh1'06Y1!05h1Mc0Ki1BRG`0!T19K09Vh1'K09i1R(M(B 0,T7Uh1`0>Th1'0;i1M9`0"i1Rd;`0AWh1M(B
225 สักครู่นี้ แล้วใช้ C-d ลบข้อความออกบางส่วน จนความยาวของข้อความอยู่ภายในหนึ่ง 225 0,TJQ1!$0CYh109Ui1(B ,Ta0Ei1Gc0*i1(B C-d ,TE:0"i1M$GRAMM!:R'0Jh1G9(B ,T(9$GRABRG"M'0"i1M$GRAM0BYh1@RBc9K09Vh1'(B
226 บรรทัด สังเกตดูว่าเครื่องหมาย '\' จะหายไป 226 ,T:CC07Q14(B 0,TJQ1'`!504Y10Gh1R`$0CWh1M'KARB(B '\' ,T(PKRBd;(B
227 227
228 >> ให้เลื่อนเคอร์เซอร์ไปไว้ที่ตำแหน่งแรกสุดของบรรทัด แล้วกด <Delete> ดู การทำ 228 >> ,Tc0Ki1`0EWh1M9`$M0Cl1`+M0Cl1d;d0Gi107Uh15SaK09h1'aC!0JX14"M':CC07Q14(B ,Ta0Ei1G!4(B <Delete> 0,T4Y1(B ,T!RC7S(B
229 แบบนี้ จะทำให้สัญลักษณ์คั่นระหว่างบรรทัดถูกลบออกไป บรรทัดนั้นก็จะถูกเอาไปต่อกับ 229 ,Ta::09Ui1(B ,T(P7Sc0Ki10JQ1-0EQ1!I03l10$Qh19CPK0Gh1R':CC07Q1406Y1!E:MM!d;(B ,T:CC07Q1409Qi190!g1(P06Y1!`MRd;05h1M0!Q1:(B
230 บรรทัดก่อนหน้านั้น รวมกันเป็นบรรทัดยาวบรรทัดเดียว และอาจจะมีสัญลักษณ์ต่อบรรทัด 230 ,T:CC07Q140!h1M9K09i1R09Qi19(B ,TCGA0!Q19`0;g19:CC07Q14BRG:CC07Q14`04U1BG(B ,TaEPMR((P0AU10JQ1-0EQ1!I03l105h1M:CC07Q14(B
231 ปรากฏขึ้น 231 ,T;CR!/0"Vi19(B
232 232
233 >> ให้กด <Return> เพื่อเพิ่ม ตัวอักษรขึ้นบรรทัดใหม่ กลับไปอย่างเดิม 233 >> ,Tc0Ki1!4(B <Return> ,T`0>Wh1M`0>Th1A(B 0,T5Q1G0MQ1!IC0"Vi19:CC07Q14cK0Ah1(B ,T!0EQ1:d;M0Bh1R'`04T1A(B
234 234
235 คำสั่งส่วนใหญ่ของ Emacs จะสามารถกำหนดจำนวนครั้งที่ต้องการให้ปฏิบัติได้ รวมทั้งการ 235 ,T$S0JQh1'0Jh1G9cK0-h1"M'(B Emacs ,T(PJRARC6!SK94(S9G9$0CQi1'07Uh105i1M'!RCc0Ki1;0/T10:Q105T1d04i1(B ,TCGA07Qi1'!RC(B
236 แทรก (insert) ตัวอักษรด้วย 236 ,Ta7C!(B (insert) 0,T5Q1G0MQ1!IC04i1GB(B
237 237
238 238
239 >> ลองป้อนคำสั่ง C-u 8 * ดู สังเกตดูว่าเกิดอะไรขึ้น 239 >> ,TEM'0;i1M9$S0JQh1'(B C-u 8 * 0,T4Y1(B 0,TJQ1'`!504Y10Gh1R`0!T14MPdC0"Vi19(B
240 240
241 ถ้าต้องการจะเพิ่มบรรทัดว่าง ๆ (blank line) ระหว่างสองบรรทัด ให้เลื่อนไปที่ตำแหน่ง 241 0,T6i1R05i1M'!RC(P`0>Th1A:CC07Q140Gh1R'(B ,Tf(B (blank line) ,TCPK0Gh1R'JM':CC07Q14(B ,Tc0Ki1`0EWh1M9d;07Uh15SaK09h1'(B
242 แรกสุดของบรรทัดที่สอง แล้วกด C-o 242 ,TaC!0JX14"M':CC07Q1407Uh1JM'(B ,Ta0Ei1G!4(B C-o
243 243
244 >> ให้เลื่อนไปที่ตำแหน่งแรกสุดของบรรทัดใดก็ได้ แล้วลองกด C-o ดู 244 >> ,Tc0Ki1`0EWh1M9d;07Uh15SaK09h1'aC!0JX14"M':CC07Q14c40!g1d04i1(B ,Ta0Ei1GEM'!4(B C-o 0,T4Y1(B
245 245
246 ถึงตรงนี้ เราก็ได้เรียนวิธีพื้นฐานสำหรับการป้อนข้อความ และการแก้ที่ผิดแล้ว นอกจากจะ 246 0,T6V1'5C'09Ui1(B ,T`CR0!g1d04i1`0CU1B90GT108U10>Wi190R9JSK0CQ1:!RC0;i1M90"i1M$GRA(B ,TaEP!RCa0!i107Uh10<T14a0Ei1G(B ,T9M!(R!(P(B
247 ลบได้ทีละตัวอักษรแล้ว ยังมีคำสั่งซึ่งสามารถใช้ลบได้ในเป็นคำ ๆ หรือเป็นบรรทัด ๆ อีกด้วย สรุป 247 ,TE:d04i107U1EP05Q1G0MQ1!ICa0Ei1G(B 0,TBQ1'0AU1$S0JQh1'0+Vh1'JRARC6c0*i1E:d04i1c9`0;g19$S(B ,Tf(B ,TK0CW1M`0;g19:CC07Q14(B ,Tf(B 0,TMU1!04i1GB(B ,TJ0CX1;(B
248 คำสั่งสำหรับการลบได้ดังนี้ 248 ,T$S0JQh1'JSK0CQ1:!RCE:d04i104Q1'09Ui1(B
249 249
250 <Delete> ลบตัวอักษรที่อยู่หน้าเคอร์เซอร์ 250 <Delete> ,TE:05Q1G0MQ1!IC07Uh1M0BYh1K09i1R`$M0Cl1`+M0Cl1(B
251 C-d ลบตัวอักษรที่อยู่ที่เคอร์เซอร์ 251 C-d ,TE:05Q1G0MQ1!IC07Uh1M0BYh107Uh1`$M0Cl1`+M0Cl1(B
252 252
253 ESC <Delete> ลบคำที่อยู่หน้าเคอร์เซอร์ 253 ESC <Delete> ,TE:$S07Uh1M0BYh1K09i1R`$M0Cl1`+M0Cl1(B
254 ESC d ลบคำตั้งแต่ตำแหน่งที่เคอร์เซอร์อยู่ 254 ESC d ,TE:$S05Qi1'a05h15SaK09h1'07Uh1`$M0Cl1`+M0Cl1M0BYh1(B
255 255
256 C-k ลบบรรทัดตั้งแต่ตำแหน่งที่เคอร์เซอร์อยู่ 256 C-k ,TE::CC07Q1405Qi1'a05h15SaK09h1'07Uh1`$M0Cl1`+M0Cl1M0BYh1(B
257 257
258 ในบางครั้ง เราอาจต้องการจะเอาส่วนที่ลบไปกลับคืนมา โปรแกรม Emacs จะจำส่วนที่ลบ 258 ,Tc9:R'$0CQi1'(B ,T`CRMR(05i1M'!RC(P`MR0Jh1G907Uh1E:d;!0EQ1:0$W19AR(B ,Tb;Ca!CA(B Emacs ,T(P(S0Jh1G907Uh1E:(B
259 ออกไว้ เวลาที่ลบข้อความในหน่วยที่มากกว่าหนึ่งตัวอักษร ให้ใช้คำสั่ง C-y เวลาที่ต้องการจะเอา 259 ,TMM!d0Gi1(B ,T`GER07Uh1E:0"i1M$GRAc9K09h1GB07Uh1AR!!0Gh1RK09Vh1'05Q1G0MQ1!IC(B ,Tc0Ki1c0*i1$S0JQh1'(B C-y ,T`GER07Uh105i1M'!RC(P`MR(B
260 ข้อความกลับคืน สิ่งที่ควรระวังก็คือ C-y ไม่ใช่ใช้ได้เพียงแค่ตำแหน่งที่ลบข้อความออกเท่านั้น แต่จะ 260 0,T"i1M$GRA!0EQ1:0$W19(B 0,TJTh1'07Uh1$GCCP0GQ1'0!g10$W1M(B C-y ,Td0Ah1c0*h1c0*i1d04i1`0>U1B'a0$h15SaK09h1'07Uh1E:0"i1M$GRAMM!`07h1R09Qi19(B ,Ta05h1(P(B
261 ใช้กับตำแหน่งใดก็ได้ C-y เป็นคำสั่งสำหรับแทรกข้อความที่เก็บไว้ ลงในตำแหน่งที่มีเคอร์เซอร์อยู่ 261 ,Tc0*i10!Q1:5SaK09h1'c40!g1d04i1(B C-y ,T`0;g19$S0JQh1'JSK0CQ1:a7C!0"i1M$GRA07Uh1`0!g1:d0Gi1(B ,TE'c95SaK09h1'07Uh10AU1`$M0Cl1`+M0Cl1M0BYh1(B
262 เราสามารถใช้ความสามารถนี้ในการเคลื่อนย้ายข้อความได้ 262 ,T`CRJRARC6c0*i1$GRAJRARC609Ui1c9!RC`$0EWh1M90Bi1RB0"i1M$GRAd04i1(B
263 263
264 คำสั่งสำหรับการลบมีอยู่สองแบบคือ คำสั่ง "Delete" กับ คำสั่ง "Kill" คำสั่ง "Kill" 264 ,T$S0JQh1'JSK0CQ1:!RCE:0AU1M0BYh1JM'a::0$W1M(B ,T$S0JQh1'(B "Delete" 0,T!Q1:(B ,T$S0JQh1'(B "Kill" ,T$S0JQh1'(B "Kill"
265 จะเก็บส่วนลบออกไว้ แต่คำสั่ง "Delete" จะไม่เก็บ แต่ถ้าหากใช้คำสั่งนี้หลาย ๆ ครั้ง ก็จะเก็บ 265 ,T(P`0!g1:0Jh1G9E:MM!d0Gi1(B ,Ta05h1$S0JQh1'(B "Delete" ,T(Pd0Ah1`0!g1:(B ,Ta05h106i1RKR!c0*i1$S0JQh1'09Ui1KERB(B ,Tf(B ,T$0CQi1'(B 0,T!g1(P`0!g1:(B
266 ส่วนที่ลบออกไว้ให้ 266 0,TJh1G907Uh1E:MM!d0Gi1c0Ki1(B
267 267
268 >> ให้กด C-n สักสองสามครั้ง เพื่อเลื่อนไปยังที่ที่เหมาะสมบนหน้าจอ แล้วลองกด C-k เพื่อ 268 >> ,Tc0Ki1!4(B C-n 0,TJQ1!JM'JRA$0CQi1'(B ,T`0>Wh1M`0EWh1M9d;0BQ1'07Uh107Uh1`KARPJA:9K09i1R(M(B ,Ta0Ei1GEM'!4(B C-k ,T`0>Wh1M(B
269 ลบบรรทัดนั้นออกดู 269 ,TE::CC07Q1409Qi19MM!04Y1(B
270 270
271 เมื่อกด C-k ครั้งแรก ข้อความในบรรทัดนั้นจะถูกลบออก และเมื่อกดอีก C-k อีกครั้ง บรรทัด 271 ,T`0AWh1M!4(B C-k ,T$0CQi1'aC!(B 0,T"i1M$GRAc9:CC07Q1409Qi19(P06Y1!E:MM!(B ,TaEP`0AWh1M!40MU1!(B C-k 0,TMU1!$0CQi1'(B ,T:CC07Q14(B
272 นั้นเองทั้งบรรทัดก็จะถูกลบออกไปด้วย แต่ถ้ากำหนดจำนวนครั้งให้กับคำสั่ง C-k ก็จะหมายถึง ให้ลบ 272 0,T9Qi19`M'07Qi1':CC07Q140!g1(P06Y1!E:MM!d;04i1GB(B ,Ta05h106i1R!SK94(S9G9$0CQi1'c0Ki10!Q1:$S0JQh1'(B C-k 0,T!g1(PKARB06V1'(B ,Tc0Ki1E:(B
273 บรรทัดออก (ทั้งเนื้อหาและตัวบรรทัด) เป็นจำนวนบรรทัด เท่ากับจำนวนครั้งที่กำหนด 273 ,T:CC07Q14MM!(B (0,T7Qi1'`09Wi1MKRaEP05Q1G:CC07Q14(B) ,T`0;g19(S9G9:CC07Q14(B ,T`07h1R0!Q1:(S9G9$0CQi1'07Uh1!SK94(B
274 274
275 บรรทัดที่เพิ่งลบออกไป จะถูกเก็บไว้ และสามารถนำกลับคืนมาได้ โดยใช้คำสั่ง C-y 275 ,T:CC07Q1407Uh1`0>Th1'E:MM!d;(B ,T(P06Y1!`0!g1:d0Gi1(B ,TaEPJRARC69S!0EQ1:0$W19ARd04i1(B ,Tb4Bc0*i1$S0JQh1'(B C-y
276 276
277 >> ลองกด C-y ดู 277 >> ,TEM'!4(B C-y 0,T4Y1(B
278 278
279 ข้อความที่ถูกลบออก โดยการกด C-k หลาย ๆ ครั้ง จะถูกเก็บรวบรวมไว้ และสามารถนำ 279 0,T"i1M$GRA07Uh106Y1!E:MM!(B ,Tb4B!RC!4(B C-k ,TKERB(B ,Tf(B ,T$0CQi1'(B ,T(P06Y1!`0!g1:CG:CGAd0Gi1(B ,TaEPJRARC69S(B
280 กลับมาทั้งหมดได้ในครั้งเดียว โดยการกด C-y 280 ,T!0EQ1:AR07Qi1'KA4d04i1c9$0CQi1'`04U1BG(B ,Tb4B!RC!4(B C-y
281 281
282 >> ลองกด C-k ดูหลาย ๆ ครั้ง 282 >> ,TEM'!4(B C-k 0,T4Y1KERB(B ,Tf(B ,T$0CQi1'(B
283 283
284 >> คำสั่งสำหรับเรียกข้อความกลับมา คือ C-y ก่อนอื่นให้เลื่อนเคอร์เซอร์ลงไปข้างล่าง 284 >> ,T$S0JQh1'JSK0CQ1:`0CU1B!0"i1M$GRA!0EQ1:AR(B 0,T$W1M(B C-y 0,T!h1M90MWh19c0Ki1`0EWh1M9`$M0Cl1`+M0Cl1E'd;0"i1R'0Eh1R'(B
285 สักสองสามบรรทัด แล้วลองกด C-y ดู ก็จะสามารถคัดลอก (copy) ข้อความได้ 285 0,TJQ1!JM'JRA:CC07Q14(B ,Ta0Ei1GEM'!4(B C-y 0,T4Y1(B 0,T!g1(PJRARC60$Q14EM!(B (copy) 0,T"i1M$GRAd04i1(B
286 286
287 ถ้าตอนนี้เก็บข้อความอะไรบางอย่างไว้ แล้วลบข้อความอื่นเพิ่มเข้าไปอีก จะเกิดอะไรขึ้น 287 0,T6i1R5M909Ui1`0!g1:0"i1M$GRAMPdC:R'M0Bh1R'd0Gi1(B ,Ta0Ei1GE:0"i1M$GRA0MWh19`0>Th1A`0"i1Rd;0MU1!(B ,T(P`0!T14MPdC0"Vi19(B
288 ผลลัพธ์คือ C-y จะเรียกคืนได้แค่เพียงข้อความที่ลบออกครั้งล่าสุดเท่านั้น 288 ,T<E0EQ1>08l10$W1M(B C-y ,T(P`0CU1B!0$W19d04i1a0$h1`0>U1B'0"i1M$GRA07Uh1E:MM!$0CQi1'0Eh1R0JX14`07h1R09Qi19(B
289 289
290 290
291 >> ลองลบบรรทัดดูหนึ่งบรรทัด แล้วเลื่อนเคอร์เซอร์ไปที่อื่น แล้วลบบรรทัดออกดูอีกหนึ่ง 291 >> ,TEM'E::CC07Q1404Y1K09Vh1':CC07Q14(B ,Ta0Ei1G`0EWh1M9`$M0Cl1`+M0Cl1d;07Uh10MWh19(B ,Ta0Ei1GE::CC07Q14MM!04Y10MU1!K09Vh1'(B
292 บรรทัด ลองกด C-y ดู แล้วสังเกตดูว่าจะได้แค่เพียงบรรทัดที่สองคืนเท่านั้น 292 ,T:CC07Q14(B ,TEM'!4(B C-y 0,T4Y1(B ,Ta0Ei1G0JQ1'`!504Y10Gh1R(Pd04i1a0$h1`0>U1B':CC07Q1407Uh1JM'0$W19`07h1R09Qi19(B
293 293
294 การอันดู (UNDO) 294 ,T!RC0MQ1904Y1(B (UNDO)
295 ============= 295 =============
296 296
297 เวลาที่แก้ไขข้อความบางอย่าง แล้วต้องการจะเปลี่ยนกลับให้เป็นอย่างเดิม ก็สามารถทำได้ทุก 297 ,T`GER07Uh1a0!i1d"0"i1M$GRA:R'M0Bh1R'(B ,Ta0Ei1G05i1M'!RC(P`;0EUh1B9!0EQ1:c0Ki1`0;g19M0Bh1R'`04T1A(B 0,T!g1JRARC67Sd04i107X1!(B
298 เมื่อด้วยคำสั่ง C-x u โดยปกติ จะใช้สำหรับยกเลิกคำสั่ง ที่ป้อนเข้าไปโดยไม่ตั้งใจ สามารถใช้ 298 ,T`0AWh1M04i1GB$S0JQh1'(B C-x u ,Tb4B;!05T1(B ,T(Pc0*i1JSK0CQ1:B!`0ET1!$S0JQh1'(B 0,T7Uh10;i1M9`0"i1Rd;b4Bd0Ah105Qi1'c((B ,TJRARC6c0*i1(B
299 คำสั่งนี้กี่ครั้งก็ได้ตามต้องการ 299 ,T$S0JQh1'09Ui10!Uh1$0CQi1'0!g1d04i15RA05i1M'!RC(B
300 300
301 >> ลองลบบรรทัดนี้ออกดู ด้วยคำสั่ง C-k แล้วเรียกกลับคืนมาด้วย C-x u 301 >> ,TEM'E::CC07Q1409Ui1MM!04Y1(B 0,T4i1GB$S0JQh1'(B C-k ,Ta0Ei1G`0CU1B!!0EQ1:0$W19AR04i1GB(B C-x u
302 302
303 คำสั่ง C-_ ก็เป็นคำสั่งอันดูอีกอันหนึ่ง ความสามารถเหมือนกับคำสั่ง C-x u 303 ,T$S0JQh1'(B C-_ 0,T!g1`0;g19$S0JQh1'0MQ1904Y10MU1!0MQ19K09Vh1'(B ,T$GRAJRARC6`K0AW1M90!Q1:$S0JQh1'(B C-x u
304 304
305 สามารถกำหนดจำนวนครั้งให้คำสั่ง C-_ และ C-x u ได้ 305 ,TJRARC6!SK94(S9G9$0CQi1'c0Ki1$S0JQh1'(B C-_ ,TaEP(B C-x u ,Td04i1(B
306 306
307 307
308 แฟ้มข้อมูล (File) 308 ,Ta0?i1A0"i1M0AY1E(B (File)
309 ============== 309 ==============
310 310
311 เราจำเป็นต้องเก็บรักษา (save) ข้อความที่แก้ไขไว้ในแฟ้มข้อมูล ถ้าต้องการจะให้สิ่งที่ 311 ,T`CR(S`0;g1905i1M'`0!g1:0CQ1!IR(B (save) 0,T"i1M$GRA07Uh1a0!i1d"d0Gi1c9a0?i1A0"i1M0AY1E(B 0,T6i1R05i1M'!RC(Pc0Ki10JTh1'07Uh1(B
312 แก้ไขเปลี่ยนไปอย่างถาวร ไม่เช่นนั้น สิ่งที่แก้ไขไปก็จะหายไป ทันทีที่เลิกการใช้ Emacs 312 ,Ta0!i1d"`;0EUh1B9d;M0Bh1R'6RGC(B ,Td0Ah1`0*h1909Qi19(B 0,TJTh1'07Uh1a0!i1d"d;0!g1(PKRBd;(B 0,T7Q1907U107Uh1`0ET1!!RCc0*i1(B Emacs
313 313
314 แฟ้มข้อมูลที่มองเห็นอยู่ คือสิ่งที่บันทึกสิ่งที่กำลังแก้ไขอยู่ หรือพูดง่าย ๆ ก็คือแฟ้มข้อมูลที่มองเห็น 314 ,Ta0?i1A0"i1M0AY1E07Uh1AM'`0Kg19M0BYh1(B 0,T$W1M0JTh1'07Uh10:Q1907V1!0JTh1'07Uh1!S0EQ1'a0!i1d"M0BYh1(B ,TK0CW1M0>Y140'h1RB(B ,Tf(B 0,T!g10$W1Ma0?i1A0"i1M0AY1E07Uh1AM'`0Kg19(B
315 อยู่คือตัวแฟ้มข้อมูลที่กำลังแก้ไขอยู่ 315 ,TM0BYh10$W1M05Q1Ga0?i1A0"i1M0AY1E07Uh1!S0EQ1'a0!i1d"M0BYh1(B
316 316
317 แต่จนกว่าแฟ้มข้อมูลจะถูกเก็บรักษา (save) ลงไป แฟ้มข้อมูลที่ถูกแก้ไขอยู่ จะไม่ถูกเขียนทับ 317 ,Ta05h1(9!0Gh1Ra0?i1A0"i1M0AY1E(P06Y1!`0!g1:0CQ1!IR(B (save) ,TE'd;(B ,Ta0?i1A0"i1M0AY1E07Uh106Y1!a0!i1d"M0BYh1(B ,T(Pd0Ah106Y1!`0"U1B907Q1:(B
318 ลงไปอย่างเด็ดขาด อันนี้เพื่อเป็นการป้องกันการเขียนทับแฟ้มข้อมูลที่แก้ไขไปแบบครึ่ง ๆ กลาง ๆ 318 ,TE'd;M0Bh1R'`04g14"R4(B 0,TMQ1909Ui1`0>Wh1M`0;g19!RC0;i1M'0!Q19!RC`0"U1B907Q1:a0?i1A0"i1M0AY1E07Uh1a0!i1d"d;a::$0CVh1'(B ,Tf(B ,T!ER'(B ,Tf(B
319 โดยไม่ได้ตั้งใจ 319 ,Tb4Bd0Ah1d04i105Qi1'c((B
320 320
321 นอกจากนี้ เพื่อเป็นการป้องกันการเก็บรักษา (save) สิ่งที่แก้ไขผิดไปโดยไม่ตั้งใจ Emacs 321 ,T9M!(R!09Ui1(B ,T`0>Wh1M`0;g19!RC0;i1M'0!Q19!RC`0!g1:0CQ1!IR(B (save) 0,TJTh1'07Uh1a0!i1d"0<T14d;b4Bd0Ah105Qi1'c((B Emacs
322 จะเปลี่ยนชื่อแฟ้มข้อมูลต้นฉบับเก็บไว้ให้ ก่อนการเก็บรักษา 322 ,T(P`;0EUh1B90*Wh1Ma0?i1A0"i1M0AY1E05i19)0:Q1:`0!g1:d0Gi1c0Ki1(B 0,T!h1M9!RC`0!g1:0CQ1!IR(B
323 323
324 หมายเหตุ: Emacs ยังมีการป้องกันอุบัติเหตุที่คาดไม่ถึง โดยการเก็บรักษาแฟ้มข้อมูลที่กำลัง 324 ,TKARB`K05X1(B: Emacs 0,TBQ1'0AU1!RC0;i1M'0!Q190MX10:Q105T1`K05X107Uh1$R4d0Ah106V1'(B ,Tb4B!RC`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E07Uh1!S0EQ1'(B
325 แก้ไขอยู่เป็นระยะ ๆ โดยใช้ชื่อแฟ้มข้อมูลต่างกัน ด้วยวิธีนี้ จะทำให้สามารถลด 325 ,Ta0!i1d"M0BYh1`0;g19CPBP(B ,Tf(B ,Tb4Bc0*i10*Wh1Ma0?i1A0"i1M0AY1E05h1R'0!Q19(B 0,T4i1GB0GT108U109Ui1(B ,T(P7Sc0Ki1JRARC6E4(B
326 ความเสียหายที่อาจเกิดขึ้นได้ ให้น้อยที่สุดเท่าที่จะทำได้ 326 ,T$GRA`0JU1BKRB07Uh1MR(`0!T140"Vi19d04i1(B ,Tc0Ki109i1MB07Uh10JX14`07h1R07Uh1(P7Sd04i1(B
327 327
328 ตรงส่วนล่างของจอ จะมีบรรทัดโหมด (mode line) ในลักษณะข้างล่างแสดงอยู่ 328 ,T5C'0Jh1G90Eh1R'"M'(M(B ,T(P0AU1:CC07Q14bKA4(B (mode line) ,Tc90EQ1!I3P0"i1R'0Eh1R'aJ4'M0BYh1(B
329 329
330 330
331 (ตัวอย่าง) [--]J:--**-Mule: TUTORIAL.th (Fundamental) ---55%-------------- 331 (0,T5Q1GM0Bh1R'(B) [--]J:--**-Mule: TUTORIAL.th (Fundamental) ---55%--------------
332 332
333 333
334 ฉบับสำเนาของ Tutorial ของ Emacs ที่กำลังอ่านอยู่นี้ชื่อ TUTORIAL.th เวลาที่สั่งให้หา 334 ,T)0:Q1:JS`9R"M'(B Tutorial ,T"M'(B Emacs 0,T7Uh1!S0EQ1'0Mh1R9M0BYh109Ui10*Wh1M(B TUTORIAL.th ,T`GER07Uh10JQh1'c0Ki1KR(B
335 แฟ้มข้อมูลหรือ find-file (ค้นหาแฟ้มข้อมูล แล้วอ่านเข้ามาในบัฟเฟอร์) ก็จะแสดงชื่อแฟ้มข้อมูลไว้ 335 ,Ta0?i1A0"i1M0AY1EK0CW1M(B find-file (0,T$i19KRa0?i1A0"i1M0AY1E(B ,Ta0Ei1G0Mh1R9`0"i1RARc90:Q1?`?M0Cl1(B) 0,T!g1(PaJ4'0*Wh1Ma0?i1A0"i1M0AY1Ed0Gi1(B
336 ตรงส่วน TUTORIAL.th ตัวอย่างเช่น ถ้าสั่งให้หาแฟ้มข้อมูลชื่อ new-file บรรทัดโหมดก็จะแสดง 336 ,T5C'0Jh1G9(B TUTORIAL.th 0,T5Q1GM0Bh1R'`0*h19(B 0,T6i1R0JQh1'c0Ki1KRa0?i1A0"i1M0AY1E0*Wh1M(B new-file ,T:CC07Q14bKA40!g1(PaJ4'(B
337 ผลว่า "Mule: new-file" 337 ,T<E0Gh1R(B "Mule: new-file"
338 338
339 หมายเหตุ: จะมีคำอธิบายเพิ่มเติมเกี่ยวกับบรรทัดโหมด (mode line) ในตอนหลัง 339 ,TKARB`K05X1(B: ,T(P0AU1$SM08T1:RB`0>Th1A`05T1A`0!Uh1BG0!Q1::CC07Q14bKA4(B (mode line) ,Tc95M9K0EQ1'(B
340 340
341 คำสั่งให้หาแฟ้มข้อมูล และคำสั่งให้เก็บรักษาแฟ้มข้อมูล มีลักษณะแตกต่างจากคำสั่งที่ผ่าน ๆ มา 341 ,T$S0JQh1'c0Ki1KRa0?i1A0"i1M0AY1E(B ,TaEP$S0JQh1'c0Ki1`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E(B 0,TAU10EQ1!I3Pa5!05h1R'(R!$S0JQh1'07Uh10<h1R9(B ,Tf(B ,TAR(B
342 ตรงที่ ประกอบไปด้วย 2 ตัวอักษร คือต้องกดคำสั่งบางอย่าง ตามหลังคำสั่ง C-x ซึ่งหมายถึงคำสั่ง 342 ,T5C'07Uh1(B ,T;CP!M:d;04i1GB(B 2 0,T5Q1G0MQ1!IC(B 0,T$W1M05i1M'!4$S0JQh1':R'M0Bh1R'(B ,T5RAK0EQ1'$S0JQh1'(B C-x 0,T+Vh1'KARB06V1'$S0JQh1'(B
343 เกี่ยวกับแฟ้มข้อมูล 343 ,T`0!Uh1BG0!Q1:a0?i1A0"i1M0AY1E(B
344 344
345 และอีกจุดหนึ่ง แต่แตกต่างจากคำสั่งที่ผ่านมาคือ เวลาสั่งให้ค้นหาแฟ้มข้อมูล เราจะถูก Emacs 345 ,TaEP0MU1!0(X14K09Vh1'(B ,Ta05h1a5!05h1R'(R!$S0JQh1'07Uh10<h1R9AR0$W1M(B ,T`GER0JQh1'c0Ki10$i19KRa0?i1A0"i1M0AY1E(B ,T`CR(P06Y1!(B Emacs
346 ถามชื่อของแฟ้มข้อมูลนั้น ๆ เราเรียกคำสั่งเหล่านั้นว่า คำสั่งประเภทที่ถามตัวเลือก (argument) 346 ,T6RA0*Wh1M"M'a0?i1A0"i1M0AY1E09Qi19(B ,Tf(B ,T`CR`0CU1B!$S0JQh1'`K0Eh1R09Qi190Gh1R(B ,T$S0JQh1';CP`@707Uh16RA05Q1G`0EW1M!(B (argument)
347 จากเทอร์มินัล 347 ,T(R!`7M0Cl10AT109Q1E(B
348 348
349 หมายเหตุ: ในที่นี้ ตัวเลือก (argument) คือชื่อแฟ้มข้อมูล 349 ,TKARB`K05X1(B: ,Tc907Uh109Ui1(B 0,T5Q1G`0EW1M!(B (argument) 0,T$W1M0*Wh1Ma0?i1A0"i1M0AY1E(B
350 350
351 C-x C-f สั่งให้หา (find) แฟ้มข้อมูล 351 C-x C-f 0,TJQh1'c0Ki1KR(B (find) ,Ta0?i1A0"i1M0AY1E(B
352 352
353 แล้ว Emacs จะถามชื่อของแฟ้มข้อมูล โดยปรากฏขึ้นที่ส่วนล่างของจอ เราเรียกส่วนที่ให้ป้อน 353 ,Ta0Ei1G(B Emacs ,T(P6RA0*Wh1M"M'a0?i1A0"i1M0AY1E(B ,Tb4B;CR!/0"Vi1907Uh10Jh1G90Eh1R'"M'(M(B ,T`CR`0CU1B!0Jh1G907Uh1c0Ki10;i1M9(B
354 ชื่อแฟ้มข้อมูลนั้นว่า มินิบัฟเฟอร์ (mini buffer) มินิบัฟเฟอร์จะถูกใช้งานในลักษณะนี้ มินิบัฟเฟอร์ 354 0,T*Wh1Ma0?i1A0"i1M0AY1E09Qi190Gh1R(B 0,TAT109T10:Q1?`?M0Cl1(B (mini buffer) 0,TAT109T10:Q1?`?M0Cl1(P06Y1!c0*i1'R9c90EQ1!I3P09Ui1(B 0,TAT109T10:Q1?`?M0Cl1(B
355 จะหมดหน้าที่และหายไป หลังจากที่ป้อนชื่อแฟ้มข้อมูล แล้วกดปุ่ม <Return> 355 ,T(PKA4K09i1R07Uh1aEPKRBd;(B ,TK0EQ1'(R!07Uh10;i1M90*Wh1Ma0?i1A0"i1M0AY1E(B ,Ta0Ei1G!40;Xh1A(B <Return>
356 356
357 >> ลองกด C-x C-f แล้วตามด้วย C-g ดู เป็นการสั่งยกเลิกเนื้อหาในมินิบัฟเฟอร์ หรือ 357 >> ,TEM'!4(B C-x C-f ,Ta0Ei1G5RA04i1GB(B C-g 0,T4Y1(B ,T`0;g19!RC0JQh1'B!`0ET1!`09Wi1MKRc90AT109T10:Q1?`?M0Cl1(B ,TK0CW1M(B
358 ยกเลิกคำสั่ง C-x C-f ดังนั้น Emacs จะไม่ค้นหาแฟ้มข้อมูลใด ๆ 358 ,TB!`0ET1!$S0JQh1'(B C-x C-f 0,T4Q1'09Qi19(B Emacs ,T(Pd0Ah10$i19KRa0?i1A0"i1M0AY1Ec4(B ,Tf(B
359 359
360 คราวนี้ มาลองเก็บรักษาแฟ้มข้อมูลดู เวลาที่ต้องการเก็บรักษาสิ่งที่แก้ไขมาจนถึงตอนนี้ ก็ให้ใช้ 360 ,T$CRG09Ui1(B ,TAREM'`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E04Y1(B ,T`GER07Uh105i1M'!RC`0!g1:0CQ1!IR0JTh1'07Uh1a0!i1d"AR(906V1'5M909Ui1(B 0,T!g1c0Ki1c0*i1(B
361 คำสั่งดังนี้ 361 ,T$S0JQh1'04Q1'09Ui1(B
362 362
363 C-x C-s เก็บรักษา (save) แฟ้มข้อมูล 363 C-x C-s ,T`0!g1:0CQ1!IR(B (save) ,Ta0?i1A0"i1M0AY1E(B
364 364
365 แล้วเนื้อหาที่อยู่ใน Emacs ก็จะถูกเขียนลงไปที่แฟ้มข้อมูล เวลาเก็บรักษาแฟ้มข้อมูล แฟ้มข้อมูล 365 ,Ta0Ei1G`09Wi1MKR07Uh1M0BYh1c9(B Emacs 0,T!g1(P06Y1!`0"U1B9E'd;07Uh1a0?i1A0"i1M0AY1E(B ,T`GER`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E(B ,Ta0?i1A0"i1M0AY1E(B
366 ต้นฉบับจะไม่สูญหายไป แต่จะถูกเก็บไว้ในชื่อใหม่ ซึ่งได้มาจากชื่อเก่าที่ต่อท้ายด้วย '~' 366 0,T5i19)0:Q1:(Pd0Ah10JY1-KRBd;(B ,Ta05h1(P06Y1!`0!g1:d0Gi1c90*Wh1McK0Ah1(B 0,T+Vh1'd04i1AR(R!0*Wh1M`0!h1R07Uh105h1M07i1RB04i1GB(B '~'
367 367
368 หลังจากที่เก็บรักษาแฟ้มข้อมูลเสร็จแล้ว Emacs ก็จะแสดงชื่อแฟ้มข้อมูลที่เก็บให้ดู 368 ,TK0EQ1'(R!07Uh1`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E`J0Cg1(a0Ei1G(B Emacs 0,T!g1(PaJ4'0*Wh1Ma0?i1A0"i1M0AY1E07Uh1`0!g1:c0Ki104Y1(B
369 369
370 >> ลองกด C-x C-x เพื่อเก็บรักษาสำเนาของ Tutorial นี้ดู ก็จะเห็นว่า ที่ส่วนล่าง 370 >> ,TEM'!4(B C-x C-x ,T`0>Wh1M`0!g1:0CQ1!IRJS`9R"M'(B Tutorial 0,T9Ui104Y1(B 0,T!g1(P`0Kg190Gh1R(B 0,T7Uh10Jh1G90Eh1R'(B
371 ของจอ มีข้อความว่า "Wrote ...../TUTORIAL.th" ปรากฏขึ้น 371 ,T"M'(M(B 0,TAU10"i1M$GRA0Gh1R(B "Wrote ...../TUTORIAL.th" ,T;CR!/0"Vi19(B
372 372
373 เวลาที่จะสร้างแฟ้มข้อมูลใหม่ ก็ให้ทำราวกับว่าจะค้นหา (find-file) แฟ้มข้อมูลเก่าซึ่งมี 373 ,T`GER07Uh1(PJ0Ci1R'a0?i1A0"i1M0AY1EcK0Ah1(B 0,T!g1c0Ki17SCRG0!Q1:0Gh1R(P0$i19KR(B (find-file) ,Ta0?i1A0"i1M0AY1E`0!h1R0+Vh1'0AU1(B
374 อยู่ก่อนหน้านี้แล้ว แล้วพิมพ์ข้อความลงไปในแฟ้มข้อมูลที่หาเจอ 374 ,TM0BYh10!h1M9K09i1R09Ui1a0Ei1G(B ,Ta0Ei1G0>T1A0>l10"i1M$GRAE'd;c9a0?i1A0"i1M0AY1E07Uh1KR`(M(B
375 375
376 และเวลาที่สั่งเก็บรักษาแฟ้มข้อมูลเท่านั้น คือตอนที่ Emacs จะเก็บเนื้อหาที่แก้ไขมาทั้งหมด ลง 376 ,TaEP`GER07Uh10JQh1'`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E`07h1R09Qi19(B 0,T$W1M5M907Uh1(B Emacs ,T(P`0!g1:`09Wi1MKR07Uh1a0!i1d"AR07Qi1'KA4(B ,TE'(B
377 ในแฟ้มข้อมูลเป็นครั้งแรก 377 ,Tc9a0?i1A0"i1M0AY1E`0;g19$0CQi1'aC!(B
378 378
379 379
380 บัฟเฟอร์ (Buffer) 380 0,T:Q1?`?M0Cl1(B (Buffer)
381 =============== 381 ===============
382 382
383 ถ้าหากสั่งให้หาแฟ้มข้อมูลอันที่สอง ด้วยคำสั่ง C-x C-f เนื้อหาของแฟ้มข้อมูลแรก ก็จะยังคง 383 0,T6i1RKR!0JQh1'c0Ki1KRa0?i1A0"i1M0AY1E0MQ1907Uh1JM'(B 0,T4i1GB$S0JQh1'(B C-x C-f ,T`09Wi1MKR"M'a0?i1A0"i1M0AY1EaC!(B 0,T!g1(P0BQ1'$'(B
384 ถูกเก็บรักษาอยู่ใน Emacs สิ่งที่เก็บรักษาแฟ้มข้อมูลที่อ่านเข้ามา ซึ่งอยู่ภายใน Emacs เรียกว่า 384 0,T6Y1!`0!g1:0CQ1!IRM0BYh1c9(B Emacs 0,TJTh1'07Uh1`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E07Uh10Mh1R9`0"i1RAR(B 0,T+Vh1'M0BYh1@RBc9(B Emacs ,T`0CU1B!0Gh1R(B
385 บัฟเฟอร์ (Buffer) เวลาที่อ่านแฟ้มข้อมูลใหม่เข้ามา Emacs ก็จะสร้างบัฟเฟอร์ใหม่ ขึ้นมาภายใน 385 0,T:Q1?`?M0Cl1(B (Buffer) ,T`GER07Uh10Mh1R9a0?i1A0"i1M0AY1EcK0Ah1`0"i1RAR(B Emacs 0,T!g1(PJ0Ci1R'0:Q1?`?M0Cl1cK0Ah1(B 0,T"Vi19AR@RBc9(B
386 386
387 ถ้าต้องการจะดูรายการของบัฟเฟอร์ ที่ถูกเก็บรักษาอยู่ภายใน Emacs ก็ให้กดคำสั่ง 387 0,T6i1R05i1M'!RC(P04Y1CRB!RC"M'0:Q1?`?M0Cl1(B 0,T7Uh106Y1!`0!g1:0CQ1!IRM0BYh1@RBc9(B Emacs 0,T!g1c0Ki1!4$S0JQh1'(B
388 388
389 C-x C-b 389 C-x C-b
390 390
391 >> ลองกด C-x C-b ดู สังเกตดูว่าแต่ละบัฟเฟอร์มีชื่อว่าอะไร และถูกตั้งชื่อไว้ว่า 391 >> ,TEM'!4(B C-x C-b 0,T4Y1(B 0,TJQ1'`!504Y10Gh1Ra05h1EP0:Q1?`?M0Cl10AU10*Wh1M0Gh1RMPdC(B ,TaEP06Y1!05Qi1'0*Wh1Md0Gi10Gh1R(B
392 อย่างไร ใน Emacs 392 ,TM0Bh1R'dC(B ,Tc9(B Emacs
393 393
394 มีบางบัฟเฟอร์ ที่ไม่มีคู่กับแฟ้มข้อมูลจริง ๆ ตัวอย่างเช่น ไม่มีแฟ้มข้อมูลที่มีชื่อว่า "*Buffer 394 0,TAU1:R'0:Q1?`?M0Cl1(B 0,T7Uh1d0Ah10AU10$Yh10!Q1:a0?i1A0"i1M0AY1E(0CT1'(B ,Tf(B 0,T5Q1GM0Bh1R'`0*h19(B ,Td0Ah10AU1a0?i1A0"i1M0AY1E07Uh10AU10*Wh1M0Gh1R(B "*Buffer
395 List*" อยู่จริง ๆ แต่เป็นบัฟเฟอร์ที่สร้างขึ้นมาเพื่อแสดงรายการบัฟเฟอร์ โดยคำสั่ง C-x C-b 395 List*" ,TM0BYh1(0CT1'(B ,Tf(B ,Ta05h1`0;g190:Q1?`?M0Cl107Uh1J0Ci1R'0"Vi19AR`0>Wh1MaJ4'CRB!RC0:Q1?`?M0Cl1(B ,Tb4B$S0JQh1'(B C-x C-b
396 396
397 ข้อความทุกข้อความที่ปรากฏอยู่ในวินโดว์ของ Emacs นั้น จะอยู่ในบัฟเฟอร์ใดบัฟเฟอร์หนึ่งเสมอ 397 0,T"i1M$GRA07X1!0"i1M$GRA07Uh1;CR!/M0BYh1c90GT19b40Gl1"M'(B Emacs 0,T9Qi19(B ,T(PM0BYh1c90:Q1?`?M0Cl1c40:Q1?`?M0Cl1K09Vh1'`JAM(B
398 398
399 >> ลองกด C-x 1 เพื่อลบรายการบัฟเฟอร์ออกดู 399 >> ,TEM'!4(B C-x 1 ,T`0>Wh1ME:CRB!RC0:Q1?`?M0Cl1MM!04Y1(B
400 400
401 การเรียกแฟ้มข้อมูลอื่นขึ้นมาแก้ไข ตอนที่กำลังแก้ไขแฟ้มข้อมูลหนึ่งอยู่นั้น จะไม่ทำให้แฟ้มข้อมูล 401 ,T!RC`0CU1B!a0?i1A0"i1M0AY1E0MWh190"Vi19ARa0!i1d"(B ,T5M907Uh1!S0EQ1'a0!i1d"a0?i1A0"i1M0AY1EK09Vh1'M0BYh109Qi19(B ,T(Pd0Ah17Sc0Ki1a0?i1A0"i1M0AY1E(B
402 แรกถูกเก็บรักษา สิ่งที่แก้ไขไปในแฟ้มข้อมูลแรกจะถูกบันทึกไว้ในบัฟเฟอร์ของแฟ้มข้อมูลนั้น เท่านั้น 402 ,TaC!06Y1!`0!g1:0CQ1!IR(B 0,TJTh1'07Uh1a0!i1d"d;c9a0?i1A0"i1M0AY1EaC!(P06Y1!0:Q1907V1!d0Gi1c90:Q1?`?M0Cl1"M'a0?i1A0"i1M0AY1E09Qi19(B ,T`07h1R09Qi19(B
403 403
404 การสร้างบัฟเฟอร์ใหม่ขึ้น สำหรับแก้ไขแฟ้มข้อมูลอันที่สอง แล้วแก้อะไรบางอย่างในบัฟเฟอร์นั้น 404 ,T!RCJ0Ci1R'0:Q1?`?M0Cl1cK0Ah10"Vi19(B ,TJSK0CQ1:a0!i1d"a0?i1A0"i1M0AY1E0MQ1907Uh1JM'(B ,Ta0Ei1Ga0!i1MPdC:R'M0Bh1R'c90:Q1?`?M0Cl109Qi19(B
405 จะไม่มีผลใด ๆ ต่อบัฟเฟอร์ของแฟ้มข้อมูลอันที่หนึ่งทั้งสิ้น จุดนี้ทำให้สามารถเก็บแฟ้มข้อมูลแรกไว้เพื่อ 405 ,T(Pd0Ah10AU1<Ec4(B ,Tf(B 0,T5h1M0:Q1?`?M0Cl1"M'a0?i1A0"i1M0AY1E0MQ1907Uh1K09Vh1'07Qi1'0JTi19(B 0,T(X1409Ui17Sc0Ki1JRARC6`0!g1:a0?i1A0"i1M0AY1EaC!d0Gi1`0>Wh1M(B
406 แก้ไขในตอนหลัง 406 ,Ta0!i1d"c95M9K0EQ1'(B
407 407
408 แต่เวลาที่ต้องการจะเก็บรักษา (save) บัฟเฟอร์ลงไปในแฟ้มข้อมูล ด้วยคำสั่ง C-x C-s นั้น 408 ,Ta05h1`GER07Uh105i1M'!RC(P`0!g1:0CQ1!IR(B (save) 0,T:Q1?`?M0Cl1E'd;c9a0?i1A0"i1M0AY1E(B 0,T4i1GB$S0JQh1'(B C-x C-s 0,T9Qi19(B
409 จะต้องสวิทซ์ไปยังบัฟเฟอร์ที่ต้องการจะเก็บ ด้วยคำสั่ง C-x C-f ซึ่งค่อนข้างยุ่งยาก เรามีคำสั่งซึ่ง 409 ,T(P05i1M'J0GT170+l1d;0BQ1'0:Q1?`?M0Cl107Uh105i1M'!RC(P`0!g1:(B 0,T4i1GB$S0JQh1'(B C-x C-f 0,T+Vh1'0$h1M90"i1R'0BXh1'BR!(B ,T`CR0AU1$S0JQh1'0+Vh1'(B
410 ใช้สำหรับการนี้โดยเฉพาะ คือ 410 ,Tc0*i1JSK0CQ1:!RC09Ui1b4B`)>RP(B 0,T$W1M(B
411 411
412 C-x s เก็บรักษา (save) ทุกบัฟเฟอร์ที่มีอยู่ 412 C-x s ,T`0!g1:0CQ1!IR(B (save) 0,T7X1!0:Q1?`?M0Cl107Uh10AU1M0BYh1(B
413 413
414 C-x s จะเก็บรักษาทุกบัฟเฟอร์ที่ถูกแก้ไขเนื้อหาไป ลงในแฟ้มข้อมูล โดยจะถามก่อนว่าจะให้ 414 C-x s ,T(P`0!g1:0CQ1!IR07X1!0:Q1?`?M0Cl107Uh106Y1!a0!i1d"`09Wi1MKRd;(B ,TE'c9a0?i1A0"i1M0AY1E(B ,Tb4B(P6RA0!h1M90Gh1R(Pc0Ki1(B
415 เก็บบัฟเฟอร์นี้ไหม y หรือ n กับบัฟเฟอร์แต่ละบัฟเฟอร์ คำถามจะปรากฏในส่วนล่างของหน้าจอ ดัง 415 ,T`0!g1:0:Q1?`?M0Cl109Ui1dKA(B y ,TK0CW1M(B n 0,T!Q1:0:Q1?`?M0Cl1a05h1EP0:Q1?`?M0Cl1(B ,T$S6RA(P;CR!/c90Jh1G90Eh1R'"M'K09i1R(M(B 0,T4Q1'(B
416 ตัวอย่างนี้ 416 0,T5Q1GM0Bh1R'09Ui1(B
417 417
418 Save file /usr/private/yours/TUTORIAL.th? (y or n) 418 Save file /usr/private/yours/TUTORIAL.th? (y or n)
419 419
420 420
421 421
422 การขยายคำสั่ง (extension) 422 ,T!RC"BRB$S0JQh1'(B (extension)
423 ======================= 423 =======================
424 424
425 ในโปรแกรม Editor นี้ มีจำนวนคำสั่งมากกว่า จำนวนคำสั่งซึ่งสามารถกดได้โดยปุ่มคอนโทรล 425 ,Tc9b;Ca!CA(B Editor 0,T9Ui1(B 0,TAU1(S9G9$S0JQh1'AR!!0Gh1R(B ,T(S9G9$S0JQh1'0+Vh1'JRARC6!4d04i1b4B0;Xh1A$M9b7CE(B
426 หรือปุ่ม META ได้หมด คำสั่งขยาย (eXtend) มีไว้เพื่อให้สามารถใช้คำสั่งเหล่านี้ได้หมด มีอยู่ 2 426 ,TK0CW1M0;Xh1A(B META ,Td04i1KA4(B ,T$S0JQh1'"BRB(B (eXtend) 0,TAU1d0Gi1`0>Wh1Mc0Ki1JRARC6c0*i1$S0JQh1'`K0Eh1R09Ui1d04i1KA4(B 0,TAU1M0BYh1(B 2
427 แบบ ดังนี้ 427 ,Ta::(B 0,T4Q1'09Ui1(B
428 428
429 C-x ขยายเพิ่มด้วยตัวอักษร สำหรับกดตัวอักษรตามเข้าไป 1 ตัว 429 C-x ,T"BRB`0>Th1A04i1GB05Q1G0MQ1!IC(B ,TJSK0CQ1:!405Q1G0MQ1!IC5RA`0"i1Rd;(B 1 0,T5Q1G(B
430 ESC x ขยายเพิ่มด้วยชื่อคำสั่ง สำหรับกดชื่อคำสั่งตามเข้าไปทั้งหมด 430 ESC x ,T"BRB`0>Th1A04i1GB0*Wh1M$S0JQh1'(B ,TJSK0CQ1:!40*Wh1M$S0JQh1'5RA`0"i1Rd;07Qi1'KA4(B
431 431
432 คำสั่งประเภทนี้ ก็เป็นคำสั่งที่มีประโยชน์ แต่ส่วนใหญ่จะถูกเรียกใช้ น้อยครั้งกว่าคำสั่งทั่วไป 432 ,T$S0JQh1';CP`@709Ui1(B 0,T!g1`0;g19$S0JQh1'07Uh10AU1;CPbB*09l1(B ,Ta05h10Jh1G9cK0-h1(P06Y1!`0CU1B!c0*i1(B 0,T9i1MB$0CQi1'!0Gh1R$S0JQh1'07Qh1Gd;(B
433 ตัวอย่างเช่น คำสั่งหาแฟ้มข้อมูล (find) C-x C-f คำสั่งเก็บรักษาแฟ้มข้อมูล (save) C-x C-s 433 0,T5Q1GM0Bh1R'`0*h19(B ,T$S0JQh1'KRa0?i1A0"i1M0AY1E(B (find) C-x C-f ,T$S0JQh1'`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E(B (save) C-x C-s
434 คำสั่ง C-x C-c (เลิก Editor) ต่างก็เป็นหนึ่งในคำสั่งเหล่านี้ 434 ,T$S0JQh1'(B C-x C-c (,T`0ET1!(B Editor) 0,T5h1R'0!g1`0;g19K09Vh1'c9$S0JQh1'`K0Eh1R09Ui1(B
435 435
436 คำสั่ง C-z เป็นคำสั่งที่ใช้ในในการออกจาก Emacs ค่อนข้างบ่อย คำสั่งนี้จะไม่ยกเลิก 436 ,T$S0JQh1'(B C-z ,T`0;g19$S0JQh1'07Uh1c0*i1c9c9!RCMM!(R!(B Emacs 0,T$h1M90"i1R'0:h1MB(B ,T$S0JQh1'09Ui1(Pd0Ah1B!`0ET1!(B
437 Emacs เลยทีเดียว แต่จะหยุด Emacs ไว้ชั่วคราว เพื่อให้สามารถกลับไปใช้ csh ได้อีก การกด 437 Emacs ,T`EB07U1`04U1BG(B ,Ta05h1(PK0BX14(B Emacs ,Td0Gi10*Qh1G$CRG(B ,T`0>Wh1Mc0Ki1JRARC6!0EQ1:d;c0*i1(B csh ,Td04i10MU1!(B ,T!RC!4(B
438 C-z จึงเป็นการหยุด Emacs ไว้ชั่วคราวเท่านั้น จะไม่ทำความเสียหายให้กับเนื้อหาที่แก้ไขไป 438 C-z 0,T(V1'`0;g19!RCK0BX14(B Emacs ,Td0Gi10*Qh1G$CRG`07h1R09Qi19(B ,T(Pd0Ah17S$GRA`0JU1BKRBc0Ki10!Q1:`09Wi1MKR07Uh1a0!i1d"d;(B
439 439
440 หมายเหตุ: แต่ทว่า ในกรณีที่ใช้บน X-window หรือใช้ sh อยู่ ก็จะไม่มีความสามารถนี้ 440 ,TKARB`K05X1(B: ,Ta05h170Gh1R(B ,Tc9!C03U107Uh1c0*i1:9(B X-window ,TK0CW1Mc0*i1(B sh ,TM0BYh1(B 0,T!g1(Pd0Ah10AU1$GRAJRARC609Ui1(B
441 441
442 442
443 คำสั่งประเภท C-x มีมากมายหลายคำสั่ง คำสั่งที่อธิบายไปแล้วมีดังนี้ 443 ,T$S0JQh1';CP`@7(B C-x 0,TAU1AR!ARBKERB$S0JQh1'(B ,T$S0JQh1'07Uh1M08T1:RBd;a0Ei1G0AU104Q1'09Ui1(B
444 444
445 C-x C-f หาแฟ้มข้อมูล (find) สำหรับแก้ไข 445 C-x C-f ,TKRa0?i1A0"i1M0AY1E(B (find) ,TJSK0CQ1:a0!i1d"(B
446 C-x C-s เก็บรักษาแฟ้มข้อมูล (save) 446 C-x C-s ,T`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E(B (save)
447 C-x C-b แสดงรายการบัฟเฟอร์ (buffer list) 447 C-x C-b ,TaJ4'CRB!RC0:Q1?`?M0Cl1(B (buffer list)
448 C-x C-c เลิกการใช้ Editor และเก็บรักษาแฟ้มข้อมูลโดยอัตโนมัติ แต่ถ้าหากมีแฟ้ม 448 C-x C-c ,T`0ET1!!RCc0*i1(B Editor ,TaEP`0!g1:0CQ1!IRa0?i1A0"i1M0AY1Eb4B0MQ15b90AQ105T1(B ,Ta05h106i1RKR!0AU1a0?i1A(B
449 ข้อมูลบางอันถูกแก้ไข ก็ให้ถามว่าจะเก็บรักษาแฟ้มข้อมูลนั้นไหม โดยทั่วไป 449 0,T"i1M0AY1E:R'0MQ1906Y1!a0!i1d"(B 0,T!g1c0Ki16RA0Gh1R(P`0!g1:0CQ1!IRa0?i1A0"i1M0AY1E09Qi19dKA(B ,Tb4B07Qh1Gd;(B
450 การออกจาก Emacs ทำได้โดยคำสั่ง C-x C-s C-x C-c คือให้เก็บรักษา 450 ,T!RCMM!(R!(B Emacs ,T7Sd04i1b4B$S0JQh1'(B C-x C-s C-x C-c 0,T$W1Mc0Ki1`0!g1:0CQ1!IR(B
451 ก่อนแล้วจึงเลิก 451 0,T!h1M9a0Ei1G0(V1'`0ET1!(B
452 452
453 คำสั่งขยายเพิ่มแบบชื่อนั้น ใช้สำหรับคำสั่งที่ไม่ค่อยได้ใช้ หรือคำสั่งที่ใช้เฉพาะกับโหมดพิเศษบาง 453 ,T$S0JQh1'"BRB`0>Th1Aa::0*Wh1M09Qi19(B ,Tc0*i1JSK0CQ1:$S0JQh1'07Uh1d0Ah10$h1MBd04i1c0*i1(B ,TK0CW1M$S0JQh1'07Uh1c0*i1`)>RP0!Q1:bKA40>T1`HI:R'(B
454 โหมด ตัวอย่างเช่น คำสั่ง "command-apropos" ซึ่งจะถาม คีย์เวิร์ด (keyword) แล้วแสดงผล 454 ,TbKA4(B 0,T5Q1GM0Bh1R'`0*h19(B ,T$S0JQh1'(B "command-apropos" 0,T+Vh1'(P6RA(B 0,T$U10Bl1`0GT10Cl14(B (keyword) ,Ta0Ei1GaJ4'<E(B
455 คำสั่งทุกคำสั่งที่มีชื่อเกี่ยวข้องกับกับคีย์เวิร์ดนั้น เวลาจะสั่งคำสั่งนี้ ก็ให้กด ESC x แล้วจะมีตัวอักษร 455 ,T$S0JQh1'07X1!$S0JQh1'07Uh10AU10*Wh1M`0!Uh1BG0"i1M'0!Q1:0!Q1:0$U10Bl1`0GT10Cl1409Qi19(B ,T`GER(P0JQh1'$S0JQh1'09Ui1(B 0,T!g1c0Ki1!4(B ESC x ,Ta0Ei1G(P0AU105Q1G0MQ1!IC(B
456 "M-x" ปรากฏขึ้นที่ส่วนล่างของจอ จากนั้นก็ให้ใส่ชื่อคำสั่งที่ต้องการ (ในกรณีนี้คือ 456 "M-x" ,T;CR!/0"Vi1907Uh10Jh1G90Eh1R'"M'(M(B ,T(R!09Qi190!g1c0Ki1c0Jh10*Wh1M$S0JQh1'07Uh105i1M'!RC(B (,Tc9!C03U109Ui10$W1M(B
457 "command-apropos") เมื่อป้อนข้อมูลไปถึง "command-a" แล้วกด SPACE BAR ส่วนที่เหลือของ 457 "command-apropos") ,T`0AWh1M0;i1M90"i1M0AY1Ed;06V1'(B "command-a" ,Ta0Ei1G!4(B SPACE BAR 0,TJh1G907Uh1`K0EW1M"M'(B
458 ชื่อคำสั่งก็จะถูกเติมเต็ม (completion) ให้เองโดยอัตโนมัติ หลังจากนั้น จะถูกถามคีย์เวิร์ด ก็ให้ 458 0,T*Wh1M$S0JQh1'0!g1(P06Y1!`05T1A`05g1A(B (completion) ,Tc0Ki1`M'b4B0MQ15b90AQ105T1(B ,TK0EQ1'(R!09Qi19(B ,T(P06Y1!6RA0$U10Bl1`0GT10Cl14(B 0,T!g1c0Ki1(B
459 กดสายอักขระ (string) ที่ต้องการรู้ลงไป ต้องไม่ใส่คีย์เวิร์ดอะไรเลย ก็จะได้คำสั่งทั้งหมดที่มีอยู่ 459 ,T!4JRB0MQ1!"CP(B (string) 0,T7Uh105i1M'!RC0CYi1E'd;(B 0,T5i1M'd0Ah1c0Jh10$U10Bl1`0GT10Cl14MPdC`EB(B 0,T!g1(Pd04i1$S0JQh1'07Qi1'KA407Uh10AU1M0BYh1(B
460 460
461 >> ลองกด ESC x ตามด้วย "command-apropos<Return>" หรือ 461 >> ,TEM'!4(B ESC x ,T5RA04i1GB(B "command-apropos<Return>" ,TK0CW1M(B
462 "command-a<Space><Return>" หลังจากนั้นก็กด "kanji<Return>" ดู 462 "command-a<Space><Return>" ,TK0EQ1'(R!09Qi190!g1!4(B "kanji<Return>" 0,T4Y1(B
463 463
464 ให้กด C-x 1 เวลาต้องการจะลบ "วินโดว์" ที่โผล่ขึ้นมาใหม่ 464 ,Tc0Ki1!4(B C-x 1 ,T`GER05i1M'!RC(PE:(B "0,TGT19b40Gl1(B" 0,T7Uh1b<0Eh10"Vi19ARcK0Ah1(B
465 465
466 บรรทัดโหมด (Mode Line) 466 ,T:CC07Q14bKA4(B (Mode Line)
467 ===================== 467 =====================
468 468
469 เวลาที่พิมพ์คำสั่งเข้าไปช้า ๆ Emacs จะแสดงสิ่งที่พิมพ์ลงไปตรงบรรทัดล่างสุดของจอซึ่งเรียก 469 ,T`GER07Uh10>T1A0>l1$S0JQh1'`0"i1Rd;0*i1R(B ,Tf(B Emacs ,T(PaJ4'0JTh1'07Uh10>T1A0>l1E'd;5C':CC07Q140Eh1R'0JX14"M'(M0+Vh1'`0CU1B!(B
470 ว่า echo area บรรทัดซึ่งอยู่ถัดขึ้นมาหนึ่งบรรทัด เรียกว่าบรรทัดโหมด (mode line) บรรทัด 470 0,TGh1R(B echo area ,T:CC07Q140+Vh1'M0BYh106Q140"Vi19ARK09Vh1':CC07Q14(B ,T`0CU1B!0Gh1R:CC07Q14bKA4(B (mode line) ,T:CC07Q14(B
471 โหมดมีลักษณะดังนี้ 471 ,TbKA40AU10EQ1!I3P04Q1'09Ui1(B
472 472
473 473
474 [--]J:--**-Mule: TUTORIAL.th (Fundamental) ---NN%-------------- 474 [--]J:--**-Mule: TUTORIAL.th (Fundamental) ---NN%--------------
475 475
476 476
477 หมายเหตุ: ตรงส่วน NN ของ NN% จะมีตัวเลขใส่อยู่ บรรทัดโหมดที่แสดงอยู่อาจจะแตกต่าง 477 ,TKARB`K05X1(B: ,T5C'0Jh1G9(B NN ,T"M'(B NN% ,T(P0AU105Q1G`E"c0Jh1M0BYh1(B ,T:CC07Q14bKA407Uh1aJ4'M0BYh1MR((Pa5!05h1R'(B
478 ไปจากตัวอย่างบ้าง แต่ก็ไม่เป็นไร ตัวอย่างเช่น อาจจะมีเวลาหรือ uptime 478 ,Td;(R!05Q1GM0Bh1R'0:i1R'(B ,Ta05h10!g1d0Ah1`0;g19dC(B 0,T5Q1GM0Bh1R'`0*h19(B ,TMR((P0AU1`GERK0CW1M(B uptime
479 แสดงผลอยู่ อันนี้เป็นความสามารถของโปรแกรม display-time 479 ,TaJ4'<EM0BYh1(B 0,TMQ1909Ui1`0;g19$GRAJRARC6"M'b;Ca!CA(B display-time
480 480
481 บรรทัดนี้มีข้อมูลที่เป็นประโยชน์อยู่หลายอย่าง 481 ,T:CC07Q1409Ui10AU10"i1M0AY1E07Uh1`0;g19;CPbB*09l1M0BYh1KERBM0Bh1R'(B
482 482
483 483
484 ข้อมูลแรกคือ ชื่อแฟ้มข้อมูลที่กำลังอ่านอยู่ ตัวเลข NN% จะแสดงให้รู้ว่ากำลังแสดงผลส่วนไหน 484 0,T"i1M0AY1EaC!0$W1M(B 0,T*Wh1Ma0?i1A0"i1M0AY1E07Uh1!S0EQ1'0Mh1R9M0BYh1(B 0,T5Q1G`E"(B NN% ,T(PaJ4'c0Ki10CYi10Gh1R!S0EQ1'aJ4'<E0Jh1G9dK9(B
485 ของแฟ้มข้อมูลอยู่ โดยคิดเป็นเปอร์เซนต์ ถ้าเป็นส่วนบนสุดของแฟ้มข้อมูลอยู่ก็จะมีข้อความว่า 485 ,T"M'a0?i1A0"i1M0AY1EM0BYh1(B ,Tb4B0$T14`0;g19`;M0Cl1`+905l1(B 0,T6i1R`0;g190Jh1G9:90JX14"M'a0?i1A0"i1M0AY1EM0BYh10!g1(P0AU10"i1M$GRA0Gh1R(B
486 --Top-- แสดงอยู่ ถ้าเป็นส่วนล่างสุดก็จะมีข้อความว่า --Bot-- ถ้าหากสามารถแสดงแฟ้มข้อมูล 486 --Top-- ,TaJ4'M0BYh1(B 0,T6i1R`0;g190Jh1G90Eh1R'0JX140!g1(P0AU10"i1M$GRA0Gh1R(B --Bot-- 0,T6i1RKR!JRARC6aJ4'a0?i1A0"i1M0AY1E(B
487 ทั้งหมดบนหน้าจอได้ ก็จะมีข้อความว่า --All-- แสดงอยู่ 487 0,T7Qi1'KA4:9K09i1R(Md04i1(B 0,T!g1(P0AU10"i1M$GRA0Gh1R(B --All-- ,TaJ4'M0BYh1(B
488 488
489 ภายในวงเล็บของบรรทัดโหมด จะแสดงให้รู้ว่าตอนนี้อยู่ในโหมด (mode) อะไร ในตัวอย่าง 489 ,T@RBc9G'`0Eg1:"M':CC07Q14bKA4(B ,T(PaJ4'c0Ki10CYi10Gh1R5M909Ui1M0BYh1c9bKA4(B (mode) ,TMPdC(B ,Tc905Q1GM0Bh1R'(B
490 ข้างบนคือ อยู่ในโหมด Fundamental ซึ่งเป็นโหมดเริ่มต้น (default) โหมดนี้เป็นหนึ่งในโหมด 490 0,T"i1R':90$W1M(B ,TM0BYh1c9bKA4(B Fundamental 0,T+Vh1'`0;g19bKA4`0CTh1A05i19(B (default) ,TbKA409Ui1`0;g19K09Vh1'c9bKA4(B
491 หลัก (Major Mode) 491 ,TK0EQ1!(B (Major Mode)
492 492
493 Emacs มีโหมดหลัก (Major Mode) สำหรับการโปรแกรมภาษา หรือการแก้ข้อความ เช่น 493 Emacs 0,TAU1bKA4K0EQ1!(B (Major Mode) ,TJSK0CQ1:!RCb;Ca!CA@RIR(B ,TK0CW1M!RCa0!i10"i1M$GRA(B ,T`0*h19(B
494 Lisp mode Text mode และโหมดอื่น ๆ อีกหลายโหมด โดยปกติ Emacs จะอยู่ในโหมดหลัก 494 Lisp mode Text mode ,TaEPbKA40MWh19(B ,Tf(B 0,TMU1!KERBbKA4(B ,Tb4B;!05T1(B Emacs ,T(PM0BYh1c9bKA4K0EQ1!(B
495 โหมดใดโหมดหนึ่งเสมอ 495 ,TbKA4c4bKA4K09Vh1'`JAM(B
496 496
497 คำสั่งบางคำสั่งจะมีพฤติกรรมที่แตกต่างกันโดยสิ้นเชิง เมื่ออยู่ในโหมดหลักที่ต่างกัน ตัวอย่าง 497 ,T$S0JQh1':R'$S0JQh1'(P0AU1>D05T1!CCA07Uh1a5!05h1R'0!Q19b4B0JTi19`0*T1'(B ,T`0AWh1MM0BYh1c9bKA4K0EQ1!07Uh105h1R'0!Q19(B 0,T5Q1GM0Bh1R'(B
498 เช่น เวลาโปรแกรมภาษา จะมีคำสั่งสำหรับสร้าง หมายเหตุ (comment) อยู่ เนื่องจากวิธีใส่ 498 ,T`0*h19(B ,T`GERb;Ca!CA@RIR(B ,T(P0AU1$S0JQh1'JSK0CQ1:J0Ci1R'(B ,TKARB`K05X1(B (comment) ,TM0BYh1(B ,T`09Wh1M'(R!0GT108U1c0Jh1(B
499 หมายเหตุของภาษาแต่ละภาษาแตกต่างกัน คำสั่งนี้ก็จะแตกต่างกันไปในแต่ละโหมดหลัก เพื่อให้ 499 ,TKARB`K05X1"M'@RIRa05h1EP@RIRa5!05h1R'0!Q19(B ,T$S0JQh1'09Ui10!g1(Pa5!05h1R'0!Q19d;c9a05h1EPbKA4K0EQ1!(B ,T`0>Wh1Mc0Ki1(B
500 สามารถใส่หมายเหตุในแต่ละภาษาได้อย่างถูกต้อง 500 ,TJRARC6c0Jh1KARB`K05X1c9a05h1EP@RIRd04i1M0Bh1R'06Y1!05i1M'(B
501 501
502 คำสั่งสำหรับการเปลี่ยนโหมดให้เป็นโหมดหลักอื่น คือคำสั่งขยาย (extend) ซึ่งชื่อคำสั่งเป็นชื่อ 502 ,T$S0JQh1'JSK0CQ1:!RC`;0EUh1B9bKA4c0Ki1`0;g19bKA4K0EQ1!0MWh19(B 0,T$W1M$S0JQh1'"BRB(B (extend) 0,T+Vh1'0*Wh1M$S0JQh1'`0;g190*Wh1M(B
503 โหมด ตัวอย่างเช่น คำสั่ง M-x fundamental-mode คือคำสั่งสำหรับเปลี่ยนโหมดเป็นโหมด 503 ,TbKA4(B 0,T5Q1GM0Bh1R'`0*h19(B ,T$S0JQh1'(B M-x fundamental-mode 0,T$W1M$S0JQh1'JSK0CQ1:`;0EUh1B9bKA4`0;g19bKA4(B
504 Fundamental 504 Fundamental
505 505
506 เวลาที่จะแก้ไขแฟ้มข้อมูลภาษาอังกฤษ ก็ให้ใช้ Text mode 506 ,T`GER07Uh1(Pa0!i1d"a0?i1A0"i1M0AY1E@RIR0MQ1'!DI(B 0,T!g1c0Ki1c0*i1(B Text mode
507 507
508 >> ลองป้อนคำสั่ง M-x text-mode<Return> 508 >> ,TEM'0;i1M9$S0JQh1'(B M-x text-mode<Return>
509 509
510 ถ้าต้องการหาข้อมูลเพิ่มเกี่ยวกับโหมดหลักที่ใช้อยู่ในปัจจุบัน ก็ให้ป้อนคำสั่ง C-h m 510 0,T6i1R05i1M'!RCKR0"i1M0AY1E`0>Th1A`0!Uh1BG0!Q1:bKA4K0EQ1!07Uh1c0*i1M0BYh1c90;Q1(0(X10:Q19(B 0,T!g1c0Ki10;i1M9$S0JQh1'(B C-h m
511 511
512 >> ให้กด C-h m เพื่อศึกษาข้อแตกต่างระหว่าง Text mode กับ Fundamental mode 512 >> ,Tc0Ki1!4(B C-h m ,T`0>Wh1M0HV1!IR0"i1Ma5!05h1R'CPK0Gh1R'(B Text mode 0,T!Q1:(B Fundamental mode
513 513
514 >> ให้กด C-x 1 เพื่อลบเอกสารออกจากจอ 514 >> ,Tc0Ki1!4(B C-x 1 ,T`0>Wh1ME:`M!JRCMM!(R!(M(B
515 515
516 ตรงส่วนซ้ายของบรรทัดโหมด จะมีสัญลักษณ์ '[--]' เพื่อแสดงโหมดสำหรับการป้อนข้อมูล 516 ,T5C'0Jh1G90+i1RB"M':CC07Q14bKA4(B ,T(P0AU10JQ1-0EQ1!I03l1(B '[--]' ,T`0>Wh1MaJ4'bKA4JSK0CQ1:!RC0;i1M90"i1M0AY1E(B
517 (input mode) อยู่ สัญลักษณ์ [--] หมายถึงสามารถป้อนข้อมูลได้ด้วยตัวอักษรภาษาอังกฤษ 517 (input mode) ,TM0BYh1(B 0,TJQ1-0EQ1!I03l1(B [--] ,TKARB06V1'JRARC60;i1M90"i1M0AY1Ed04i104i1GB05Q1G0MQ1!IC@RIR0MQ1'!DI(B
518 (English alphabets) กรุณาอ่านคู่มือของ "Tamago" สำหรับรายละเอียดของวิธีใช้ 518 (English alphabets) ,T!0CX13R0Mh1R90$Yh10AW1M"M'(B "Tamago" ,TJSK0CQ1:CRBEP`0MU1B4"M'0GT108U1c0*i1(B
519 519
520 และตรงด้านขวาของสัญลักษณ์นั้น จะมีเครื่องหมายแสดงสถานะของ flag ของระบบรหัส 520 ,TaEP5C'04i1R9"GR"M'0JQ1-0EQ1!I03l109Qi19(B ,T(P0AU1`$0CWh1M'KARBaJ4'J6R9P"M'(B flag ,T"M'CP::C0KQ1J(B
521 (coding-system) อยู่ Mule สามารถกำหนดระบบรหัสแยกเฉพาะสำหรับ การเก็บอ่านแฟ้มข้อมูล 521 (coding-system) ,TM0BYh1(B Mule ,TJRARC6!SK94CP::C0KQ1JaB!`)>RPJSK0CQ1:(B ,T!RC`0!g1:0Mh1R9a0?i1A0"i1M0AY1E(B
522 การป้อนข้อมูลจากคีย์บอร์ด การแสดงผลออกทางจอ ได้อิสระจากกัน แต่โดยปกติจะแสดงเฉพาะ 522 ,T!RC0;i1M90"i1M0AY1E(R!0$U10Bl1:M0Cl14(B ,T!RCaJ4'<EMM!7R'(M(B ,Td04i10MT1JCP(R!0!Q19(B ,Ta05h1b4B;!05T1(PaJ4'`)>RP(B
523 สัญลักษณ์ช่วยจำ (mnemonic) ของระบบรหัสสำหรับการเก็บอ่านแฟ้มข้อมูล เท่านั้น 523 0,TJQ1-0EQ1!I03l10*h1GB(S(B (mnemonic) ,T"M'CP::C0KQ1JJSK0CQ1:!RC`0!g1:0Mh1R9a0?i1A0"i1M0AY1E(B ,T`07h1R09Qi19(B
524 524
525 >> ตรวจดูว่ามีสัญลักษณ์ คล้ายคลึงกับ "J:" "S:" "E:" แสดงอยู่ที่บรรทัดโหมดหรือไม่ 525 >> ,T5CG(04Y10Gh1R0AU10JQ1-0EQ1!I03l1(B ,T$0Ei1RB$0EV1'0!Q1:(B "J:" "S:" "E:" ,TaJ4'M0BYh107Uh1:CC07Q14bKA4K0CW1Md0Ah1(B
526 526
527 ตัวอักษรตัวแรกคือ สัญลักษณ์ช่วยจำ (mnemonic) ของระบบรหัสที่ใช้อยู่ ตัว ':' แสดงให้รู้ 527 0,T5Q1G0MQ1!IC05Q1GaC!0$W1M(B 0,TJQ1-0EQ1!I03l10*h1GB(S(B (mnemonic) ,T"M'CP::C0KQ1J07Uh1c0*i1M0BYh1(B 0,T5Q1G(B ':' ,TaJ4'c0Ki10CYi1(B
528 ว่ามีตัวอักษรของภาษาอื่น นอกจากภาษาอังกฤษแสดงอยู่ (เช่น ภาษาจีน ภาษาญี่ปุ่น เป็นต้น) ตัว J 528 0,TGh1R0AU105Q1G0MQ1!IC"M'@RIR0MWh19(B ,T9M!(R!@RIR0MQ1'!DIaJ4'M0BYh1(B (,T`0*h19(B ,T@RIR0(U19(B ,T@RIR0-Uh10;Xh19(B ,T`0;g1905i19(B) 0,T5Q1G(B J
529 หมายถึง รหัสที่ใช้กับ JUNET คือ รหัส JIS ตัว S หมายถึง Shift-JIS และ ตัว E หมายถึง 529 ,TKARB06V1'(B ,TC0KQ1J07Uh1c0*i10!Q1:(B JUNET 0,T$W1M(B ,TC0KQ1J(B JIS 0,T5Q1G(B S ,TKARB06V1'(B Shift-JIS ,TaEP(B 0,T5Q1G(B E ,TKARB06V1'(B
530 รหัส EUC ภาษาญี่ปุ่น จะสลับเปลี่ยน (toggle) การแสดงผลภาษานานาชาติได้โดย C-x C-k t 530 ,TC0KQ1J(B EUC ,T@RIR0-Uh10;Xh19(B ,T(PJ0EQ1:`;0EUh1B9(B (toggle) ,T!RCaJ4'<E@RIR9R9R*R05T1d04i1b4B(B C-x C-k t
531 531
532 ตัวอย่างข้างล่าง คือการสลับเปลี่ยนไม่ให้แสดงภาษานานาชาติ แล้วสลับกลับอีกครั้งหนึ่ง 532 0,T5Q1GM0Bh1R'0"i1R'0Eh1R'(B 0,T$W1M!RCJ0EQ1:`;0EUh1B9d0Ah1c0Ki1aJ4'@RIR9R9R*R05T1(B ,Ta0Ei1GJ0EQ1:!0EQ1:0MU1!$0CQi1'K09Vh1'(B
533 533
534 >> ลองป้อนคำสั่ง C-x C-k t ดูสองครั้ง 534 >> ,TEM'0;i1M9$S0JQh1'(B C-x C-k t 0,T4Y1JM'$0CQi1'(B
535 535
536 ถ้าเทอร์มินัลที่ใช้อยู่มีปุ่ม META และโหมดที่ใช้อยู่เป็นรหัส JIS เราก็จะสามารถใช้ปุ่ม META 536 0,T6i1R`7M0Cl10AT109Q1E07Uh1c0*i1M0BYh10AU10;Xh1A(B META ,TaEPbKA407Uh1c0*i1M0BYh1`0;g19C0KQ1J(B JIS ,T`CR0!g1(PJRARC6c0*i10;Xh1A(B META
537 แทนการกดปุ่ม ESCAPE ได้ วิธีใช้จะเหมือนกับการใช้ปุ่มคอนโทรล คือให้กดปุ่ม META ค้างไว้แล้วจึง 537 ,Ta79!RC!40;Xh1A(B ESCAPE ,Td04i1(B 0,TGT108U1c0*i1(P`K0AW1M90!Q1:!RCc0*i10;Xh1A$M9b7CE(B 0,T$W1Mc0Ki1!40;Xh1A(B META 0,T$i1R'd0Gi1a0Ei1G0(V1'(B
538 กดตัวอักษรตาม M-<ตัวอักษร> จะทำหน้าที่เหมือนกับ ESC <ตัวอักษร> นั่นคือ ทุกอย่างที่อธิบายมา 538 ,T!405Q1G0MQ1!IC5RA(B M-<0,T5Q1G0MQ1!IC(B> ,T(P7SK09i1R07Uh1`K0AW1M90!Q1:(B ESC <0,T5Q1G0MQ1!IC(B> 0,T9Qh190$W1M(B 0,T7X1!M0Bh1R'07Uh1M08T1:RBAR(B
539 จนถึงจุดนี้ จะยังคงมีผลเหมือนเดิม หลังจากเปลี่ยน ESC <ตัวอักษร> ให้เป็น M-<ตัวอักษร> แต่ข้อ 539 ,T(906V1'0(X1409Ui1(B ,T(P0BQ1'$'0AU1<E`K0AW1M9`04T1A(B ,TK0EQ1'(R!`;0EUh1B9(B ESC <0,T5Q1G0MQ1!IC(B> ,Tc0Ki1`0;g19(B M-<0,T5Q1G0MQ1!IC(B> ,Ta05h10"i1M(B
540 ควรระวังก็คือ ปุ่ม META จะไม่สามารถใช้ได้กับรหัส Shift-JIS และ EUC 540 ,T$GCCP0GQ1'0!g10$W1M(B 0,T;Xh1A(B META ,T(Pd0Ah1JRARC6c0*i1d04i10!Q1:C0KQ1J(B Shift-JIS ,TaEP(B EUC
541 541
542 การเปลี่ยนระบบรหัสจะมีผลแค่เพียงกับแต่ละบัฟเฟอร์เท่านั้น สามารถดูคำสั่งเกี่ยวกับระบบรหัส 542 ,T!RC`;0EUh1B9CP::C0KQ1J(P0AU1<Ea0$h1`0>U1B'0!Q1:a05h1EP0:Q1?`?M0Cl1`07h1R09Qi19(B ,TJRARC604Y1$S0JQh1'`0!Uh1BG0!Q1:CP::C0KQ1J(B
543 ได้โดยคำสั่ง C-h a coding-system <Return> 543 ,Td04i1b4B$S0JQh1'(B C-h a coding-system <Return>
544 544
545 >> ให้ป้อนคำสั่ง C-h a coding-system <Return> แล้วอ่านรายละเอียดของคำสั่ง 545 >> ,Tc0Ki10;i1M9$S0JQh1'(B C-h a coding-system <Return> ,Ta0Ei1G0Mh1R9CRBEP`0MU1B4"M'$S0JQh1'(B
546 set-display-coding-system set-file-coding-system และ 546 set-display-coding-system set-file-coding-system ,TaEP(B
547 set-process-coding-system จากเอกสารที่ปรากฏขึ้น 547 set-process-coding-system ,T(R!`M!JRC07Uh1;CR!/0"Vi19(B
548 548
549 การค้นหา (search) 549 ,T!RC0$i19KR(B (search)
550 ================ 550 ================
551 551
552 Emacs สามารถค้นหาสายอักขระ (string) ภายในแฟ้มข้อมูลไปทางข้างหน้าหรือข้างหลังได้ 552 Emacs ,TJRARC60$i19KRJRB0MQ1!"CP(B (string) ,T@RBc9a0?i1A0"i1M0AY1Ed;7R'0"i1R'K09i1RK0CW1M0"i1R'K0EQ1'd04i1(B
553 ถ้าต้องการค้นหาไปทางข้างหน้าของตำแหน่งเคอร์เซอร์ (cursor) ก็ให้กด C-s ถ้าต้องการค้นหา 553 0,T6i1R05i1M'!RC0$i19KRd;7R'0"i1R'K09i1R"M'5SaK09h1'`$M0Cl1`+M0Cl1(B (cursor) 0,T!g1c0Ki1!4(B C-s 0,T6i1R05i1M'!RC0$i19KR(B
554 ไปทางข้างหลังของตำแหน่งเคอร์เซอร์ ก็ให้กด C-r หลังจากนั้นจะมีข้อความว่า "I-search:" 554 ,Td;7R'0"i1R'K0EQ1'"M'5SaK09h1'`$M0Cl1`+M0Cl1(B 0,T!g1c0Ki1!4(B C-r ,TK0EQ1'(R!09Qi19(P0AU10"i1M$GRA0Gh1R(B "I-search:"
555 ปรากฏขึ้นตรง echo area ยกเลิกการค้นหาได้ด้วยการกด ESC 555 ,T;CR!/0"Vi195C'(B echo area ,TB!`0ET1!!RC0$i19KRd04i104i1GB!RC!4(B ESC
556 556
557 557
558 >> กด C-s เพื่อเริ่มการค้นหา แล้วกดตัวอักษรของคำว่า "cursor" ลงไปทีละตัวอย่าง 558 >> ,T!4(B C-s ,T`0>Wh1M`0CTh1A!RC0$i19KR(B ,Ta0Ei1G!405Q1G0MQ1!IC"M'$S0Gh1R(B "cursor" ,TE'd;07U1EP05Q1GM0Bh1R'(B
559 ช้า แล้วสังเกตดูว่าเคอร์เซอร์ขยับไปอย่างไร 559 0,T*i1R(B ,Ta0Ei1G0JQ1'`!504Y10Gh1R`$M0Cl1`+M0Cl1"0BQ1:d;M0Bh1R'dC(B
560 560
561 >> ลองกด C-s ดูอีกหนึ่งครั้งเพื่อค้นหาคำว่า "cursor" ตัวต่อไป 561 >> ,TEM'!4(B C-s 0,T4Y10MU1!K09Vh1'$0CQi1'`0>Wh1M0$i19KR$S0Gh1R(B "cursor" 0,T5Q1G05h1Md;(B
562 562
563 >> กด <Delete> ดู 4 ครั้ง แล้วสังเกตดูว่าการเคลื่อนที่ของเคอร์เซอร์ 563 >> ,T!4(B <Delete> 0,T4Y1(B 4 ,T$0CQi1'(B ,Ta0Ei1G0JQ1'`!504Y10Gh1R!RC`$0EWh1M907Uh1"M'`$M0Cl1`+M0Cl1(B
564 564
565 >> กด ESC เพื่อยกเลิกการค้นหา 565 >> ,T!4(B ESC ,T`0>Wh1MB!`0ET1!!RC0$i19KR(B
566 566
567 การค้นหาจะเริ่มขึ้นทันที ในระหว่างที่พิมพ์สายอักขระที่ต้องการจะค้นหา เข้าไปเพียงบางส่วน 567 ,T!RC0$i19KR(P`0CTh1A0"Vi1907Q1907U1(B ,Tc9CPK0Gh1R'07Uh10>T1A0>l1JRB0MQ1!"CP07Uh105i1M'!RC(P0$i19KR(B ,T`0"i1Rd;`0>U1B':R'0Jh1G9(B
568 ถ้าต้องการจะค้นหาตัวต่อไป ก็ให้กด C-s อีกหนึ่งครั้ง ถ้าหากค้นหาสายอักขระที่ป้อนเข้าไปไม่พบ ก็ 568 0,T6i1R05i1M'!RC(P0$i19KR05Q1G05h1Md;(B 0,T!g1c0Ki1!4(B C-s 0,TMU1!K09Vh1'$0CQi1'(B 0,T6i1RKR!0$i19KRJRB0MQ1!"CP07Uh10;i1M9`0"i1Rd;d0Ah1>:(B 0,T!g1(B
569 จะมีข้อความปรากฏขึ้น ให้กด C-g เพื่อยกเลิก 569 ,T(P0AU10"i1M$GRA;CR!/0"Vi19(B ,Tc0Ki1!4(B C-g ,T`0>Wh1MB!`0ET1!(B
570 570
571 ระหว่างที่ค้นหาอยู่ ถ้ากด <Delete> ตัวอักษรตัวสุดท้ายในสายอักขระก็จะถูกลบไป แล้ว 571 ,TCPK0Gh1R'07Uh10$i19KRM0BYh1(B 0,T6i1R!4(B <Delete> 0,T5Q1G0MQ1!IC05Q1G0JX1407i1RBc9JRB0MQ1!"CP0!g1(P06Y1!E:d;(B ,Ta0Ei1G(B
572 เคอร์เซอร์ก็จะกลับไปตำแหน่งก่อนหน้า ตัวอย่างเช่น ถ้ากด "cu" ก็จะค้นหาไปถึงตำแหน่งที่มีคำว่า 572 ,T`$M0Cl1`+M0Cl10!g1(P!0EQ1:d;5SaK09h1'0!h1M9K09i1R(B 0,T5Q1GM0Bh1R'`0*h19(B 0,T6i1R!4(B "cu" 0,T!g1(P0$i19KRd;06V1'5SaK09h1'07Uh10AU1$S0Gh1R(B
573 "cu" แต่ถ้ากด <Delete> ในจังหวะนี้ ตัว 'u' ใน search line ก็จะหายไป แล้วเคอร์เซอร์ 573 "cu" ,Ta05h106i1R!4(B <Delete> ,Tc90(Q1'KGP09Ui1(B 0,T5Q1G(B 'u' ,Tc9(B search line 0,T!g1(PKRBd;(B ,Ta0Ei1G`$M0Cl1`+M0Cl1(B
574 จะขยับกลับไปที่ตำแหน่งที่มีตัว 'c' อยู่ 574 ,T(P"0BQ1:!0EQ1:d;07Uh15SaK09h1'07Uh10AU105Q1G(B 'c' ,TM0BYh1(B
575 575
576 ถ้ากดตัวอักษรคอนโทรล (control character) ตัวอื่น นอกเหนือจาก C-s หรือ C-r 576 0,T6i1R!405Q1G0MQ1!IC$M9b7CE(B (control character) 0,T5Q1G0MWh19(B ,T9M!`K09W1M(R!(B C-s ,TK0CW1M(B C-r
577 การค้นหาก็จะสิ้นสุดลง 577 ,T!RC0$i19KR0!g1(P0JTi190JX14E'(B
578 578
579 คำสั่ง C-s จะค้นหาสายอักขระที่ต้องการ ไปทางข้างหน้าของตำแหน่งเคอร์เซอร์ ถ้าต้องการ 579 ,T$S0JQh1'(B C-s ,T(P0$i19KRJRB0MQ1!"CP07Uh105i1M'!RC(B ,Td;7R'0"i1R'K09i1R"M'5SaK09h1'`$M0Cl1`+M0Cl1(B 0,T6i1R05i1M'!RC(B
580 ค้นหาไปทางทิศหลัง ก็ให้กด C-r นั่นคือ สามารถใช้ C-s และ C-r สลับกันเพื่อค้นหาไปได้ในทั้ง 580 0,T$i19KRd;7R'07T1HK0EQ1'(B 0,T!g1c0Ki1!4(B C-r 0,T9Qh190$W1M(B ,TJRARC6c0*i1(B C-s ,TaEP(B C-r ,TJ0EQ1:0!Q19`0>Wh1M0$i19KRd;d04i1c907Qi1'(B
581 สองทิศทาง C-s และ C-r ทำหน้าที่เหมือนกันทุกประการ จะต่างกันก็ตรงทิศทางการค้นหาเท่านั้น 581 ,TJM'07T1H7R'(B C-s ,TaEP(B C-r ,T7SK09i1R07Uh1`K0AW1M90!Q1907X1!;CP!RC(B ,T(P05h1R'0!Q190!g15C'07T1H7R'!RC0$i19KR`07h1R09Qi19(B
582 582
583 Recursive Editing Level 583 Recursive Editing Level
584 584
585 บางที เราอาจจะหลุดเข้าไปอยู่ในสถานะที่เรียกว่า Recursive Editing Level ได้โดย 585 ,T:R'07U1(B ,T`CRMR((PK0EX14`0"i1Rd;M0BYh1c9J6R9P07Uh1`0CU1B!0Gh1R(B Recursive Editing Level ,Td04i1b4B(B
586 ไม่ตั้งใจ ในโหมดนี้ เครื่องหมายวงเล็บ '()' ที่แสดงชื่อโหมดหลัก (major mode) อยู่จะมีวงเล็บ 586 ,Td0Ah105Qi1'c((B ,Tc9bKA409Ui1(B ,T`$0CWh1M'KARBG'`0Eg1:(B '()' 0,T7Uh1aJ4'0*Wh1MbKA4K0EQ1!(B (major mode) ,TM0BYh1(P0AU1G'`0Eg1:(B
587 '[]' ล้อม เพิ่มขึ้นอีกหนึ่งชั้น ตัวอย่างเช่น ถ้าเดิมเป็น (Fundamental) อยู่ ก็จะเปลี่ยนเป็น 587 '[]' 0,TEi1MA(B ,T`0>Th1A0"Vi190MU1!K09Vh1'0*Qi19(B 0,T5Q1GM0Bh1R'`0*h19(B 0,T6i1R`04T1A`0;g19(B (Fundamental) ,TM0BYh1(B 0,T!g1(P`;0EUh1B9`0;g19(B
588 [(Fundamental)] แทน 588 [(Fundamental)] ,Ta79(B
589 589
590 หมายเหตุ: เราจะไม่อธิบายเกี่ยวกับ Recursive Editing Level ในที่นี้ 590 ,TKARB`K05X1(B: ,T`CR(Pd0Ah1M08T1:RB`0!Uh1BG0!Q1:(B Recursive Editing Level ,Tc907Uh109Ui1(B
591 591
592 ให้กด M-x top-level <Return> เพื่อที่จะออกจาก Recursive Editing Level 592 ,Tc0Ki1!4(B M-x top-level <Return> ,T`0>Wh1M07Uh1(PMM!(R!(B Recursive Editing Level
593 593
594 >> ลองกดดู ตรงส่วนล่างของจอจะมีข้อความว่า "Back to top level" ปรากฏขึ้น 594 >> ,TEM'!404Y1(B ,T5C'0Jh1G90Eh1R'"M'(M(P0AU10"i1M$GRA0Gh1R(B "Back to top level" ,T;CR!/0"Vi19(B
595 595
596 เนื่องจาก เราอยู่ในระดับบนสุด (top level) อยู่แล้ว คำสั่งนี้จึงไม่มีผลใด ๆ 596 ,T`09Wh1M'(R!(B ,T`CRM0BYh1c9CP04Q1::90JX14(B (top level) ,TM0BYh1a0Ei1G(B ,T$S0JQh1'09Ui10(V1'd0Ah10AU1<Ec4(B ,Tf(B
597 597
598 ไม่สามารถใช้ คำสั่ง C-g เพื่อที่จะออกจาก Recursive Editing Level ได้ 598 ,Td0Ah1JRARC6c0*i1(B ,T$S0JQh1'(B C-g ,T`0>Wh1M07Uh1(PMM!(R!(B Recursive Editing Level ,Td04i1(B
599 599
600 600
601 Help 601 Help
602 ==== 602 ====
603 603
604 Emacs มีความสามารถที่มีประโยชน์ มากมายหลายอย่าง ซึ่งไม่สามารถอธิบายได้หมดในที่นี้ 604 Emacs 0,TAU1$GRAJRARC607Uh10AU1;CPbB*09l1(B ,TAR!ARBKERBM0Bh1R'(B 0,T+Vh1'd0Ah1JRARC6M08T1:RBd04i1KA4c907Uh109Ui1(B
605 แต่เราจะสามารถเรียกใช้ <HELP> เพื่อที่จะเรียนรู้ความสามารถเหล่านี้ ได้โดยการกด C-h ซึ่งจะ 605 ,Ta05h1`CR(PJRARC6`0CU1B!c0*i1(B <HELP> ,T`0>Wh1M07Uh1(P`0CU1B90CYi1$GRAJRARC6`K0Eh1R09Ui1(B ,Td04i1b4B!RC!4(B C-h 0,T+Vh1'(P(B
606 ช่วยให้เราได้รับรู้ข้อมูลเพิ่มเติมหลายอย่าง 606 0,T*h1GBc0Ki1`CRd04i10CQ1:0CYi10"i1M0AY1E`0>Th1A`05T1AKERBM0Bh1R'(B
607 607
608 วิธีใช้คือให้กด C-h แล้วตามด้วยตัวเลือก (option) อีกหนึ่งตัวอักษร ถ้าไม่รู้ว่าจะต้องใช้ 608 0,TGT108U1c0*i10$W1Mc0Ki1!4(B C-h ,Ta0Ei1G5RA04i1GB05Q1G`0EW1M!(B (option) 0,TMU1!K09Vh1'05Q1G0MQ1!IC(B 0,T6i1Rd0Ah10CYi10Gh1R(P05i1M'c0*i1(B
609 ตัวเลือกอะไร ก็ให้กด C-h ? แล้วจะมีคำอธิบายเกี่ยวกับตัวเลือกปรากฏขึ้น ได้หากเปลี่ยนใจจะ 609 0,T5Q1G`0EW1M!MPdC(B 0,T!g1c0Ki1!4(B C-h ? ,Ta0Ei1G(P0AU1$SM08T1:RB`0!Uh1BG0!Q1:05Q1G`0EW1M!;CR!/0"Vi19(B ,Td04i1KR!`;0EUh1B9c((P(B
610 ไม่เรียก HELP หลังจากกด C-h ก็ให้กด C-g เพื่อยกเลิกได้ 610 ,Td0Ah1`0CU1B!(B HELP ,TK0EQ1'(R!!4(B C-h 0,T!g1c0Ki1!4(B C-g ,T`0>Wh1MB!`0ET1!d04i1(B
611 611
612 คำสั่ง HELP พื้นฐานที่สุดอันหนึ่งก็คือ C-h c แล้วตามด้วยการกดคำสั่งบางคำสั่ง ซึ่งจะให้คำ 612 ,T$S0JQh1'(B HELP 0,T>Wi190R907Uh10JX140MQ19K09Vh1'0!g10$W1M(B C-h c ,Ta0Ei1G5RA04i1GB!RC!4$S0JQh1':R'$S0JQh1'(B 0,T+Vh1'(Pc0Ki1$S(B
613 อธิบายสั้น ๆ เกี่ยวกับคำสั่งนั้น 613 ,TM08T1:RB0JQi19(B ,Tf(B ,T`0!Uh1BG0!Q1:$S0JQh1'09Qi19(B
614 614
615 >> ลองกด C-h c C-p ดู ซึ่งจะให้ข้อความว่า 615 >> ,TEM'!4(B C-h c C-p 0,T4Y1(B 0,T+Vh1'(Pc0Ki10"i1M$GRA0Gh1R(B
616 "C-p runs the command previous-line" 616 "C-p runs the command previous-line"
617 617
618 คำสั่งนี้จะช่วยรื้อฟื้นความจำ เกี่ยวกับคำสั่งที่เคยผ่านตาแล้ว แต่จำไม่ได้ ได้เป็นอย่างดี คำสั่ง 618 ,T$S0JQh1'09Ui1(P0*h1GB0CWi1M0?Wi19$GRA(S(B ,T`0!Uh1BG0!Q1:$S0JQh1'07Uh1`$B0<h1R95Ra0Ei1G(B ,Ta05h1(Sd0Ah1d04i1(B ,Td04i1`0;g19M0Bh1R'04U1(B ,T$S0JQh1'(B
619 ที่มีมากกว่าหนึ่งตัวอักษร เช่น C-x C-s ก็สามารถกดตามหลัง C-h c ได้ 619 0,T7Uh10AU1AR!!0Gh1RK09Vh1'05Q1G0MQ1!IC(B ,T`0*h19(B C-x C-s 0,T!g1JRARC6!45RAK0EQ1'(B C-h c ,Td04i1(B
620 620
621 ถ้าหากต้องการรู้รายละเอียดมากกว่านี้ ก็ให้ใช้ k แทนตัว c 621 0,T6i1RKR!05i1M'!RC0CYi1CRBEP`0MU1B4AR!!0Gh1R09Ui1(B 0,T!g1c0Ki1c0*i1(B k ,Ta7905Q1G(B c
622 622
623 >> ลองกด C-h k C-p ดู 623 >> ,TEM'!4(B C-h k C-p 0,T4Y1(B
624 624
625 ก็จะมีวินโดว์เพิ่มใน Emacs อีกหนึ่งอัน เพื่อแสดงรายละเอียดของคำสั่งนั้น เมื่ออ่านจบแล้ว 625 0,T!g1(P0AU10GT19b40Gl1`0>Th1Ac9(B Emacs 0,TMU1!K09Vh1'0MQ19(B ,T`0>Wh1MaJ4'CRBEP`0MU1B4"M'$S0JQh1'09Qi19(B ,T`0AWh1M0Mh1R9(:a0Ei1G(B
626 ก็ให้กด C-x 1 เพิ่มลบวินโดว์ออก 626 0,T!g1c0Ki1!4(B C-x 1 ,T`0>Th1AE:0GT19b40Gl1MM!(B
627 627
628 ตัวเลือกอื่นที่มีประโยชน์ มีดังนี้ 628 0,T5Q1G`0EW1M!0MWh1907Uh10AU1;CPbB*09l1(B 0,TAU104Q1'09Ui1(B
629 629
630 C-h f ให้ใส่ชื่อของคำสั่ง เพื่อแสดงรายละเอียดเกี่ยวกับคำสั่งนั้น 630 C-h f ,Tc0Ki1c0Jh10*Wh1M"M'$S0JQh1'(B ,T`0>Wh1MaJ4'CRBEP`0MU1B4`0!Uh1BG0!Q1:$S0JQh1'09Qi19(B
631 631
632 >> ให้กด C-h f previous-line แล้วตามด้วย <Return> เพื่อแสดงรายละเอียดเกี่ยว 632 >> ,Tc0Ki1!4(B C-h f previous-line ,Ta0Ei1G5RA04i1GB(B <Return> ,T`0>Wh1MaJ4'CRBEP`0MU1B4`0!Uh1BG(B
633 กับคำสั่งซึ่งเรียกใช้ได้จากการกด C-p 633 0,T!Q1:$S0JQh1'0+Vh1'`0CU1B!c0*i1d04i1(R!!RC!4(B C-p
634 634
635 C-h a แล้วตามด้วยคีย์เวิร์ด (keyword) เพื่อแสดงคำสั่งทุกคำสั่ง ที่มีคีย์เวิร์ด รวมอยู่ 635 C-h a ,Ta0Ei1G5RA04i1GB0$U10Bl1`0GT10Cl14(B (keyword) ,T`0>Wh1MaJ4'$S0JQh1'07X1!$S0JQh1'(B 0,T7Uh10AU10$U10Bl1`0GT10Cl14(B ,TCGAM0BYh1(B
636 คำสั่งเหล่านี้สามารถเรียกใช้ได้โดยการกด ESC x 636 ,T$S0JQh1'`K0Eh1R09Ui1JRARC6`0CU1B!c0*i1d04i1b4B!RC!4(B ESC x
637 637
638 >> ลองกด C-h a file แล้วตามด้วย <Return> เพื่อแสดงชื่อคำสั่งทุกคำสั่งที่มีคำว่า 638 >> ,TEM'!4(B C-h a file ,Ta0Ei1G5RA04i1GB(B <Return> ,T`0>Wh1MaJ4'0*Wh1M$S0JQh1'07X1!$S0JQh1'07Uh10AU1$S0Gh1R(B
639 "file" รวมอยู่ ซึ่งจะมี find-file และ write-file ที่เรียกใช้ได้โดยการกด 639 "file" ,TCGAM0BYh1(B 0,T+Vh1'(P0AU1(B find-file ,TaEP(B write-file 0,T7Uh1`0CU1B!c0*i1d04i1b4B!RC!4(B
640 C-x C-f และ C-x C-w รวมอยู่ด้วย 640 C-x C-f ,TaEP(B C-x C-w ,TCGAM0BYh104i1GB(B
641 641
642 ท้ายสุดนี้ 642 0,T7i1RB0JX1409Ui1(B
643 ====== 643 ======
644 644
645 อย่าลืม: คำสั่งสำหรับการเลิก Emacs คือ C-x C-c 645 ,TM0Bh1R0EW1A(B: ,T$S0JQh1'JSK0CQ1:!RC`0ET1!(B Emacs 0,T$W1M(B C-x C-c
646 646
647 647
648 เอกสารฉบับเบื้องต้นนี้ ตั้งใจเขียนขึ้นสำหรับผู้ที่เริ่มหัดใหม่ โดยเฉพาะ ถ้าหากมีจุดไหนที่ไม่ 648 ,T`M!JRC)0:Q1:`0:Wi1M'05i1909Ui1(B 0,T5Qi1'c(`0"U1B90"Vi19JSK0CQ1:0<Yi107Uh1`0CTh1A0KQ14cK0Ah1(B ,Tb4B`)>RP(B 0,T6i1RKR!0AU10(X14dK907Uh1d0Ah1(B
649 เข้าใจ ก็อย่ามัวแต่โทษตัวเอง แต่ขอให้โยนความผิดมายังผู้เขียนแทน 649 ,T`0"i1Rc((B 0,T!g1M0Bh1R0AQ1Ga05h1b7I05Q1G`M'(B ,Ta05h1"Mc0Ki1bB9$GRA0<T14AR0BQ1'0<Yi1`0"U1B9a79(B
650 650
651 651
652 หลังจากใช้ EMACS ดูสักสองสามวัน ก็คงจะชินไปเอง ในตอนแรก อาจจะมีจุดที่รู้สึกสับสนและ 652 ,TK0EQ1'(R!c0*i1(B EMACS 0,T4Y10JQ1!JM'JRA0GQ19(B 0,T!g1$'(P0*T19d;`M'(B ,Tc95M9aC!(B ,TMR((P0AU10(X1407Uh10CYi10JV1!0JQ1:J9aEP(B
653 ไม่เข้าใจอยู่บ้าง แต่สิ่งนี้ย่อมเกิดขึ้นเสมอ เวลาแต่เริ่มใช้ Editor ใหม่ใด ๆ ก็ตาม โดยเฉพาะ 653 ,Td0Ah1`0"i1Rc(M0BYh10:i1R'(B ,Ta05h10JTh1'09Ui10Bh1MA`0!T140"Vi19`JAM(B ,T`GERa05h1`0CTh1Ac0*i1(B Editor ,TcK0Ah1c4(B ,Tf(B 0,T!g15RA(B ,Tb4B`)>RP(B
654 อย่างยิ่งกับ EMACS เนื่องจากเป็นโปรแกรมที่มีความสามารถหลากหลายมาก อันที่จริงแล้ว EMACS 654 ,TM0Bh1R'0BTh1'0!Q1:(B EMACS ,T`09Wh1M'(R!`0;g19b;Ca!CA07Uh10AU1$GRAJRARC6KER!KERBAR!(B 0,TMQ1907Uh1(0CT1'a0Ei1G(B EMACS
655 ทำได้ทุกสิ่งทุกอย่าง 655 ,T7Sd04i107X1!0JTh1'07X1!M0Bh1R'(B
656 656
657 657
658 658
659 ขอขอบคุณ 659 ,T"M"M:0$X13(B
660 ======= 660 =======
661 เอกสารฉบับนี้ ดัดแปลงมาจาก "MicroEMACS (kemacs) ภาษาญี่ปุ่น เบื้องต้น" ซึ่งได้มาจาก 661 ,T`M!JRC)0:Q1:09Ui1(B 0,T4Q14a;E'AR(R!(B "MicroEMACS (kemacs) ,T@RIR0-Uh10;Xh19(B ,T`0:Wi1M'05i19(B" 0,T+Vh1'd04i1AR(R!(B
662 JUNET เพื่อให้ใช้เป็น Tutorial สำหรับ GNUEmacs (Nemacs) 662 JUNET ,T`0>Wh1Mc0Ki1c0*i1`0;g19(B Tutorial ,TJSK0CQ1:(B GNUEmacs (Nemacs)
663 663
664 เอกสารนี้ ดัดแปลงมาจาก "JOVE Tutorial" (19 มกราคม 86) ของ Jonathan Payne 664 ,T`M!JRC09Ui1(B 0,T4Q14a;E'AR(R!(B "JOVE Tutorial" (19 ,TA!CR$A(B 86) ,T"M'(B Jonathan Payne
665 ซึ่งดัดแปลงมาจากเอกสารของ Steve Zimmerman แห่ง CCA-UNIX ซึ่งดัดแปลง (อีกที) มา 665 0,T+Vh1'04Q14a;E'AR(R!`M!JRC"M'(B Steve Zimmerman ,Ta0Kh1'(B CCA-UNIX 0,T+Vh1'04Q14a;E'(B (0,TMU1!07U1(B) ,TAR(B
666 จากเอกสาร "Teach-Emacs" ฉบับเบื้องต้น (31 ตุลาคม 85) ของ MIT 666 ,T(R!`M!JRC(B "Teach-Emacs" ,T)0:Q1:`0:Wi1M'05i19(B (31 0,T5X1ER$A(B 85) ,T"M'(B MIT
667 667
668 Update - February 1986 by Dana Hoggatt. 668 Update - February 1986 by Dana Hoggatt.
669 669
670 Update - December 1986 by Kim Leburg. 670 Update - December 1986 by Kim Leburg.
671 671
672 Update/Translate - July 1987 by SANETO Takanori 672 Update/Translate - July 1987 by SANETO Takanori
673 673
674 ขอขอบคุณเป็นพิเศษ 674 ,T"M"M:0$X13`0;g190>T1`HI(B
675 ============== 675 ==============
676 676
677 คุณ SANETO Takanori (ซาเนโตะ ทากาโนริ) ผู้แปลภาษาญี่ปุ่นฉบับแรกสุด เอกสารฉบับนี้ 677 0,T$X13(B SANETO Takanori (,T+R`9b5P(B ,T7R!Rb90CT1(B) 0,T<Yi1a;E@RIR0-Uh10;Xh19)0:Q1:aC!0JX14(B ,T`M!JRC)0:Q1:09Ui1(B
678 เขียนด้วย GMW + Wnn + Nemacs ขอแสดงความขอบคุณ แด่ผู้ที่สร้างโปรแกรมสุดวิเศษเหล่านี้ขึ้น 678 ,T`0"U1B904i1GB(B GMW + Wnn + Nemacs ,T"MaJ4'$GRA"M:0$X13(B ,Ta04h10<Yi107Uh1J0Ci1R'b;Ca!CA0JX140GT1`HI`K0Eh1R09Ui10"Vi19(B
679 และขอขอบคุณ คุณ Fujiwara Shoko ที่ให้ความช่วยเหลือในการแปล การป้อนข้อมูล และอย่างอื่นอีก 679 ,TaEP"M"M:0$X13(B 0,T$X13(B Fujiwara Shoko 0,T7Uh1c0Ki1$GRA0*h1GB`K0EW1Mc9!RCa;E(B ,T!RC0;i1M90"i1M0AY1E(B ,TaEPM0Bh1R'0MWh190MU1!(B
680 หลาย ๆ อย่าง 680 ,TKERB(B ,Tf(B ,TM0Bh1R'(B
681 681
682 682
683 683
684 684
685 ขอรับผิดชอบ การแปลที่ผิดพลาด ข้อมูลเท็จ และอื่น ๆ ไว้แต่เพียงผู้เดียว 685 ,T"M0CQ1:0<T14*M:(B ,T!RCa;E07Uh10<T14>ER4(B 0,T"i1M0AY1E`07g1((B ,TaEP0MWh19(B ,Tf(B ,Td0Gi1a05h1`0>U1B'0<Yi1`04U1BG(B
686 686
687 ซุซูกิ ฮิโรโนบุ@sra.co.jp 687 0,T+X10+Y10!T1(B 0,TNT1bCb90:X1(B@sra.co.jp
688 688
689 689
690 Update/Add - December 1987 by Hironobu Suzuki 690 Update/Add - December 1987 by Hironobu Suzuki
691 Update/Add - November 1989 by Ken'ichi Handa 691 Update/Add - November 1989 by Ken'ichi Handa
692 Update/Add - January 1990 by Shigeki Yoshida 692 Update/Add - January 1990 by Shigeki Yoshida