ฉันทำCtrl+W
ใน terminal mac เพื่อลบคำ (ลบจากที่เคอร์เซอร์อยู่ที่ที่จุดเริ่มต้นของคำ)
ฉันจะทำในสิ่งที่ตรงกันข้าม - ลบจากที่เคอร์เซอร์อยู่ที่ท้ายคำ?
ฉันทำCtrl+W
ใน terminal mac เพื่อลบคำ (ลบจากที่เคอร์เซอร์อยู่ที่ที่จุดเริ่มต้นของคำ)
ฉันจะทำในสิ่งที่ตรงกันข้าม - ลบจากที่เคอร์เซอร์อยู่ที่ท้ายคำ?
คำตอบ:
ขึ้นอยู่กับเชลล์และโหมดแก้ไขบรรทัดคำสั่งที่ใช้งานอยู่
สำหรับเชลล์ที่มีโหมดการแก้ไขบรรทัดคำสั่ง Emacs ( set -o emacs
ในเชลล์บางตัว) ให้ใช้Alt+D(สิ่งนี้ไม่ทำงานบน macOS ไม่ว่าด้วยเหตุผลใด แต่พิมพ์อักขระ∂
ให้ใช้Escdแทน)
สำหรับเชลล์ที่มีโหมดแก้ไขบรรทัดคำสั่ง Vi ( set -o vi
ในเชลล์บางตัว) ให้ใช้Escdw(สิ่งนี้จะทำงานบน macOS ได้เช่นกัน)
สำหรับวินัยสาย TTY, ^W
ลบพื้นที่สีขาวคั่นก่อนหน้าคำว่า
ในตัวvi
แก้ไขในโหมดแทรกให้^W
ลบย้อนกลับไปที่จุดเริ่มต้นของลำดับแรกของ alnums หรือไม่ใช่ alnums (บนfoo-+-bar.. baz
จะเป็นการลบครั้งแรกbaz
จาก..
นั้นbar
จากนั้นตาม-+-
ด้วยfoo
)
ในemacs
เครื่องมือแก้ไข^W
ลบตำแหน่งเคอร์เซอร์ออกจากเครื่องหมาย (ตำแหน่งที่คุณตั้งค่าไว้Ctrl+Space)
ตัวแก้ไขบรรทัดบางตัวเช่นreadline
(ใช้โดยbash
, gdb
... ), zle
(ใช้งานโดยzsh
) pdksh
เมื่ออยู่ในvi
โหมดให้ประพฤติเหมือนvi
ในเรื่องนั้นและเมื่ออยู่ในemacs
โหมดจะทำงานเหมือนมีระเบียบวินัยของ tty (ไม่ใช่emacs
)
libedit
(ใช้โดย BSD shells หรือ (เป็นทางเลือก) dash
), tcsh
AT&T ksh
ในemacs
โหมดทำงานเหมือนemacs
ที่^W
ลบเครื่องหมาย (เริ่มต้นที่จุดเริ่มต้นของบัฟเฟอร์)
สำหรับการลบคำไปข้างหน้าในvi
เครื่องมือแก้ไขคุณต้องทำในโหมดคำสั่ง ( ปกติ ) ด้วยdw
เพื่อลบไปยังจุดเริ่มต้นของลำดับถัดไปของ alnums หรือ non-alnums (หรือจุดสิ้นสุดของบรรทัด) และdW
เพื่อลบ ลำดับถัดไปของที่ไม่ใช่ช่องว่าง (จี้ของ^W
วินัยบรรทัด tty)
ในตัวemacs
แก้ไขบรรทัดMeta-Dจะลบไปยังจุดสิ้นสุดของลำดับถัดไปของอักขระ alnum ตัวดำเนินการการเคลื่อนไหวของคำ ( Meta-B, Meta-F) ทำงานในทำนองเดียวกัน
บรรณาธิการบรรทัดคำสั่งเมื่ออยู่ในvi
โหมดทำงานเหมือนvi
แต่ในemacs
โหมดคุณมีสองโรงเรียนหลัก: tcsh
โรงเรียนและksh
โรงเรียน
ksh
โรงเรียน ( readline
, ksh
, yash
) ทำงานส่วนใหญ่เช่นemacs
( fish
พฤติกรรมแตกต่างกันเล็กน้อยในวิธีการที่จะถือว่าไม่ใช่ alnum อักขระที่ไม่ใช่ช่องว่างทั้งในemacs
และvi
โหมด)
ในtcsh
โรงเรียน ( tcsh
, libedit
, zsh
) การเคลื่อนไหวคำจะขึ้นอยู่กับคำพูดของช่องว่างที่คั่นด้วยเพื่อให้มีความสอดคล้องกับสาย TTY วินัย^W
ในเรื่องที่
ในzsh
พฤติกรรมนั้นสามารถปรับแต่งได้ด้วยสไตล์คำที่แตกต่างกันสำหรับวิดเจ็ตการเคลื่อนไหวของคำทั้งหมด
สำหรับreadline
คุณสามารถรับtcsh
โรงเรียน (และMeta-Dลบคำศัพท์ประเภทเดียวกันได้Ctrl-W) โดยเพิ่มใน~/.inputrc
:
set keymap vi-move
"\e[EMACS~": emacs-editing-mode
set keymap emacs
"\e[VI~": vi-movement-mode
"\ed": "\e[VI~dW\e[EMACS~"
"\ef": vi-fWord
"\eb": vi-bWord
หรือในอีกทางหนึ่งให้จัดตำแหน่ง^W
วิดเจ็ตการเคลื่อนไหวคำอื่น ๆ (ทำตัวเหมือนMeta-Backscape) ด้วย:
set keymap emacs
"\C-W": backward-kill-word
ใน Linux พยายามCtrl+k
ลบจากตำแหน่งที่เคอร์เซอร์อยู่ที่ท้ายคำ
มีทางลัดอื่น ๆ ไม่กี่รายการด้านล่าง (ทำงานใน Linux):
Ctrl+e
-> ใช้เคอร์เซอร์ท้ายคำCtrl+t
-> Inter-change ตำแหน่งของตัวอักษรCtrl+y
-> เพิ่ม postfix "hh" เป็นคำปัจจุบันCtrl+u
-> ลบทั้งบรรทัดCtrl+o
-> ทำงานเหมือนกับปุ่ม EnterCtrl+p
-> ทำงานเหมือนปุ่มลูกศรขึ้นCtrl+a
-> นำเคอร์เซอร์ไปที่ตำแหน่งเริ่มต้นของคำสั่งCtrl+d
-> ปิดเทอร์มินัลCtrl+f
-> เลื่อนเคอร์เซอร์ไปข้างหน้าด้วยอักขระหนึ่งตัวCtrl+h
-> ทำงานเหมือนกับปุ่ม BackspaceCtrl+j
-> ทำงานเหมือนกับปุ่ม EnterCtrl+m
-> ทำงานเหมือนกับปุ่ม EnterCtrl+b
-> ทำงานเหมือนกับปุ่มลูกศรขวา 14 Ctrl+4
-> ลบคำCtrl+k
ลบไปยังจุดสิ้นสุดของเส้น Ctrl+u
ลบทั้งบรรทัด (หากเคอร์เซอร์อยู่ท้ายสุด) Ctrl+d
ส่ง EOF Ctrl+e
ไปที่จุดสิ้นสุดของบรรทัดฯลฯ
bash
ในvi
โหมดคุณสามารถใช้dW
เพื่อลบเหล่านั้น