ใน readline ของ bash ในโหมด emacs ฉันเพิ่งค้นพบฟังก์ชั่นการแปลงสัญญาณทำให้ฉันมีโอกาสที่จะแก้ไขการพิมพ์ผิดอย่างรวดเร็วเช่น
dc dir
ถึง
cd dir
โดยกดCTRL+ Tที่c
ตัวละคร
มีบางอย่างที่คล้ายกันใน Vi / Vim ที่ให้ฉันสลับอักขระและคำต่าง ๆ ได้ไหม?
ใน readline ของ bash ในโหมด emacs ฉันเพิ่งค้นพบฟังก์ชั่นการแปลงสัญญาณทำให้ฉันมีโอกาสที่จะแก้ไขการพิมพ์ผิดอย่างรวดเร็วเช่น
dc dir
ถึง
cd dir
โดยกดCTRL+ Tที่c
ตัวละคร
มีบางอย่างที่คล้ายกันใน Vi / Vim ที่ให้ฉันสลับอักขระและคำต่าง ๆ ได้ไหม?
คำตอบ:
สำหรับตัวละครมันค่อนข้างง่าย: xp
การสลับตัวอักษรใต้เคอร์เซอร์ด้วยตัวอักษรต่อไปนี้และXp
เพื่อสลับตัวอักษรใต้เคอร์เซอร์ด้วยตัวอักษรก่อนหน้า
x
คำสั่งลบตัวอักษรภายใต้เคอร์เซอร์ออกจากเคอร์เซอร์บนตัวอักษรถัดไป X
คำสั่งลบตัวอักษรก่อนเคอร์เซอร์ออกจากเคอร์เซอร์บนตัวอักษรเดียวกันมันเป็น
p
วาง (วาง) ข้อความที่ถูกลบหรือถูกดึงล่าสุดหลังตำแหน่งเคอร์เซอร์ปัจจุบัน ( P
ทำให้มันเป็นเพียงแค่ก่อนที่ตำแหน่งเคอร์เซอร์ปัจจุบันดังนั้นxP
และXP
ทั้งสองออกจากข้อความทางที่มันเป็นก่อนที่คุณจะเริ่มต้น.)
สำหรับการแลกเปลี่ยนคำฉันไม่แน่ใจ บางทีคนอื่นสามารถตอบได้ คุณสามารถเข้าใกล้dawwP
(หรือทำการแมปใหม่ให้ย่อให้สั้นลง) แต่สิ่งนั้นจะแตกในหลาย ๆ กรณีเช่นใกล้ถึงจุดสิ้นสุดของบรรทัด
การแมปการสลับคำจากVim wikiจะไม่ทำงานอย่างถูกต้องกับคำที่มีอักขระเน้นเสียง
แมปเหล่านี้จะถูกปรับให้เข้ากับการทำงานร่วมกับ (ยุโรป) มาตรฐาน ISO / IEC_8859-1 Latin-1 ตัวละครเสริม นี้จะกระทำโดยการแทนทุกกรณี\w
ด้วย[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]
และทุกกรณีด้วย\_W
\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]
นอกจากนี้การไฮไลต์การค้นหาจะถูกล้างหากจำเป็น นี่คือความสำเร็จโดยการเพิ่ม:nohlsearch<return>
ในตอนท้ายของการทำแผนที่แต่ละเมื่อจำเป็น
นี่คือผลลัพธ์ที่ได้:
" Use gc to swap the current CHARACTER with the next, WITHOUT changing the cursor position.
nnoremap <silent> gc xph
" Use gw to swap the current WORD with the next, WITHOUT changing the cursor position.
nnoremap <silent> gw "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>
" Disable Alt+[menukey] menu keys (i.e. Alt+h for help)
set winaltkeys=no
" Use Alt + ← or Alt + h to swap the current WORD with the previous, keeping the cursor on the current word. This feels like "PUSHING" the word to the left.
nnoremap <silent> <A-Left> "_yiw?[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]\+\%#<CR>:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>
nnoremap <silent> <A-h> "_yiw?[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]\+\%#<CR>:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o><c-l>:nohlsearch<return>
" <A-h> corresponds to è
" Use Alt + → or Alt + l to swap the current WORD with the next, keeping the cursor on the current word. This feels like "PUSHING" the word to the right.
nnoremap <silent> <A-Right> "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o>/[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+<CR><c-l>:nohlsearch<return>
nnoremap <silent> <A-l> "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)/\3\2\1/<CR><c-o>/[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+<CR><c-l>:nohlsearch<return>
" <A-l> corresponds to ì
" Use g{ to swap the current PARAGRAPH with the next.
nnoremap g{ {dap}p{