ฉันจะพลิกตัวละครหรือคำเช่น emacs ได้อย่างไร


10

ใน readline ของ bash ในโหมด emacs ฉันเพิ่งค้นพบฟังก์ชั่นการแปลงสัญญาณทำให้ฉันมีโอกาสที่จะแก้ไขการพิมพ์ผิดอย่างรวดเร็วเช่น

dc dir

ถึง

cd dir

โดยกดCTRL+ Tที่cตัวละคร

มีบางอย่างที่คล้ายกันใน Vi / Vim ที่ให้ฉันสลับอักขระและคำต่าง ๆ ได้ไหม?


1
คุณสามารถสร้างมาโคร / การเชื่อมต่อที่ทำ vim.wikia.com/wiki/Reverse_lettersเป็นตัวอย่าง
fruglemonkey

คำตอบ:


13

สำหรับตัวละครมันค่อนข้างง่าย: xpการสลับตัวอักษรใต้เคอร์เซอร์ด้วยตัวอักษรต่อไปนี้และXpเพื่อสลับตัวอักษรใต้เคอร์เซอร์ด้วยตัวอักษรก่อนหน้า

xคำสั่งลบตัวอักษรภายใต้เคอร์เซอร์ออกจากเคอร์เซอร์บนตัวอักษรถัดไป Xคำสั่งลบตัวอักษรก่อนเคอร์เซอร์ออกจากเคอร์เซอร์บนตัวอักษรเดียวกันมันเป็น

pวาง (วาง) ข้อความที่ถูกลบหรือถูกดึงล่าสุดหลังตำแหน่งเคอร์เซอร์ปัจจุบัน ( Pทำให้มันเป็นเพียงแค่ก่อนที่ตำแหน่งเคอร์เซอร์ปัจจุบันดังนั้นxPและXPทั้งสองออกจากข้อความทางที่มันเป็นก่อนที่คุณจะเริ่มต้น.)

สำหรับการแลกเปลี่ยนคำฉันไม่แน่ใจ บางทีคนอื่นสามารถตอบได้ คุณสามารถเข้าใกล้dawwP(หรือทำการแมปใหม่ให้ย่อให้สั้นลง) แต่สิ่งนั้นจะแตกในหลาย ๆ กรณีเช่นใกล้ถึงจุดสิ้นสุดของบรรทัด


2
หากการแก้ปัญหาที่ไม่ใช่ธุรกิจหลักเป็นที่ยอมรับแล้วมีgithub.com/tommcdo/vim-exchangeซึ่งช่วยให้คุณไม่เพียง แต่แลกเปลี่ยนคำ แต่ยังภูมิภาคทั้งvimcasts.org/episodes/...
dkns

2

การแมปสลับคำสำหรับภาษาละติน

การแมปการสลับคำจาก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{
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.