เป็นกลุ่มที่กำหนดเองด้วยคำสั่ง emacs (โหมดแทรกเท่านั้น)


10

ฉันเป็นemacsผู้ใช้และฉันต้องเปลี่ยนไปvimใช้ แต่ฉันคิดถึงบางคำสั่ง emacs พื้นฐานในvimโหมดแทรก:

  1. C-A
  2. C-E
  3. C-K
  4. C-Y
  5. C-x C-s
  6. ... และอื่น ๆ

ฉันรู้ว่าฉันสามารถกดEscapeแล้วกดปุ่มบางปุ่มต่อไปนี้และในที่สุดก็กดปุ่มi:

  1. ^
  2. $
  3. d$
  4. p
  5. :w [Enter]
  6. ...

แต่ฉันจะต้องการที่จะอยู่ในvimโหมดแทรกและหลีกเลี่ยงการกดEscape/ iปุ่ม

บนเว็บที่ฉันได้พบการปรับแต่งสำหรับemacs( vi-mode, vip, viper, vimpulse, vim-mode, evil) แต่ยังไม่พบสิ่งที่ตรงกันข้าม: ปรับแต่งvimเพื่อใช้emacsคำสั่ง ...

ฉันสนใจเกี่ยวกับemacsคำสั่งในvim โหมดแทรกเท่านั้น เพียงบางคำสั่งพื้นฐานเช่นbashคำสั่ง: C-A, C-E, C-K, C-Y, C-U... (ครับC-Uไม่ได้เป็นค่าเริ่มต้นemacsคำสั่ง แต่ผมชอบมันมากเกินไป)

คำตอบ:


7

ฉันตอบคำถามนี้สี่ปีต่อมาเพราะคำตอบที่ให้ไว้เป็นคำตอบบางส่วนที่ไม่สามารถตอบคำถามเดิมได้อย่างสมบูรณ์

ฉันมีความปรารถนาเช่นเดียวกับ olibre และต้องการหาวิธีแก้ปัญหาที่สมบูรณ์ ฉันมาจากมุมมองที่แตกต่าง - ฉันคุ้นเคยกับการแก้ไขบรรทัด Emacs ในทุบตี - แต่ปัญหาก็เหมือนกัน ฉันต้องการที่จะนำสิ่งนั้นเข้าสู่โหมด Vim insert (เท่านั้น)

ที่อยู่ต่อไปนี้ที่อยู่ของคำขอ keybinding ทั้งหมดในคำถามเดิมที่โพสต์โดย olibre รวมถึงความพิเศษบางอย่าง:

" Mimic Emacs Line Editing in Insert Mode Only
inoremap <C-A> <Home>
inoremap <C-B> <Left>
inoremap <C-E> <End>
inoremap <C-F> <Right>
" â is <Alt-B>
inoremap â <C-Left>
" æ is <Alt-F>
inoremap æ <C-Right>
inoremap <C-K> <Esc>lDa
inoremap <C-U> <Esc>d0xi
inoremap <C-Y> <Esc>Pa
inoremap <C-X><C-S> <Esc>:w<CR>a

การผูกเท่านั้นที่ฉันไม่สามารถไปทำงานได้ ณ จุดนี้คือ<Alt-B>และ<Alt-F>ซึ่งจะข้ามคำทั้งหมด เมื่อใดก็ตามที่ผมผูก<Esc>, <Alt>หรือ<Meta>รวมกัน, gVim (v7.4 ใน Windows) เอาท์พุทอักขระเน้นเสียง โปรดแก้ไขคำตอบนี้หากคุณมีวิธีแก้ไขปัญหานี้ ฉันได้ชุดค่าผสม Alt เพื่อใช้งานตามข้อเสนอแนะของโพสต์อื่นเพื่อใช้ตัวอักษรพิเศษ ฉันได้แทรกพวกเขาด้านบน

แก้ไข

- (การแก้ไขไม่ได้เกิดจากโปสเตอร์คำตอบดั้งเดิม) -

ฉันใช้สิ่งต่อไปนี้ภายใต้ Neovim และ Windows 10 คุณอาจต้องเปลี่ยน "A" เป็น "M" บนระบบปฏิบัติการอื่น ๆ เพราะ "alt" อาจเป็น "meta" ที่อื่น ฉันไม่ได้เล่นกับมันมากพอ

inoremap <A-x> <Esc>:
inoremap <A-f> <Esc>lwi
inoremap <A-b> <Esc>bi
inoremap <A-S-f> <Esc>lWi
inoremap <A-S-b> <Esc>Bi

เพียงข้อเสนอแนะเล็ก ๆ : ฉันคิดว่า<Esc>paจะดีกว่าสำหรับ<C-Y>
Yamaneko

ดูเหมือนว่า<C-K>จะไม่ทำงานเมื่อเคอร์เซอร์อยู่ทางด้านซ้ายสุด - ควรลบทั้งบรรทัด แต่Esc>lDaจะทำให้อักขระตัวแรกถูกยกเลิกการลบ
Ying Xiong

7

คุณสามารถแมคำสั่งใด ๆ ในโหมดแทรกเพื่ออะไรโดยใช้คำสั่งหรือบันทึกการพิมพ์โดยใช้:imap :imสำหรับการจับคู่ครั้งแรกของคุณคุณสามารถพิมพ์ (ในโหมดปกติ):

:im <C-A> <esc>^i

ซึ่งไปที่โหมดปกติ (พร้อมกับหลบหนี) กด^เพื่อคุณและกลับไปที่โหมดแทรก ดูวิธีใช้สำหรับข้อมูลเพิ่มเติม:

:help :imap หรือสั้นกว่า: :h :im

โปรดทราบว่าคุณอาจเขียนทับการแมปกุญแจที่มีอยู่ วางคำสั่งลงใน.vimrcไฟล์กำหนดค่าของคุณหากคุณต้องการให้มีทุกไฟล์


ขอบคุณสำหรับเคล็ดลับที่คุณ +1 :-) แต่คุณรู้ไหมว่าการแมปประเภทนี้ได้รับการกำหนดค่าแล้ว? (เช่นไม่มีการแมปกุญแจที่มีอยู่เขียนทับ) จะหาโครงการ / การกำหนดค่าดังกล่าวได้ที่ไหน ฉันต้องการที่จะใช้สิ่งที่ทำไปแล้วอีกครั้ง (และมีประสิทธิภาพ) มากกว่าที่จะลองทำเอง ไชโย
โอลิเบอร์

ฉันควรถาม / ย้ายคำถามของฉันไปที่superuser.comหรือไม่
olibre

ขอบคุณ! คุณสามารถดูว่าคำสั่งนั้นมีอยู่ด้วยคำสั่ง (ตรรกะ) :im <c-a>หรือไม่ หากมีข้อความว่า 'ไม่พบการจับคู่' คุณจะไม่เขียนทับใด ๆ ฉันไม่คิดว่ามันจะแข็งแกร่งขึ้นไปกว่านี้อีกแล้ว ...
Joker

หืมม ... ฉันต้องเขียนโค้ดทดสอบการกำหนดค่าของฉันจากนั้นแก้ไขข้อบกพร่องของฉันและอีกครั้ง .... แต่ฉันไม่ทราบvimคำสั่งทั้งหมด... ได้โปรดคุณรู้ไหมว่าฉันจะหารายการของ:imการขัดแย้งครั้งสุดท้ายได้ที่ไหน? FYI, นอกจากนี้ผมยังใช้กับต่อไปนี้bashคำสั่ง: M-backspace, M-F, M-B, M-D... มันจะดีถ้ามีคนทำมาแล้วว่าหุ้นและการทำงานของเขาไม่ได้หรือไม่ (คล้าย ๆevil) ดังนั้นฉันสามารถนำการ:imแมปกุญแจของเขากลับมาใช้ใหม่ได้โดยไม่ต้องทำด้วยตัวเอง คุณเห็นสิ่งที่ฉันหมายถึงอะไร
olibre

ผมอาจจะไม่เข้าใจว่าสิ่งที่คุณหมายถึง :imแต่คุณจะพบทุกแมปที่สำคัญที่ไม่ได้มาตรฐานโดยการพิมพ์ หากต้องการแสดงความคิดเห็นในระดับที่สูงขึ้น: หากคุณต้องการใช้ Vim บนแพลตฟอร์ม / คอมพิวเตอร์หลายเครื่องโดยไม่ต้องโหลดปลั๊กอินโหมดพิเศษหรือไฟล์ vimrc ของตัวเองฉันคิดว่าสิ่งที่ดีที่สุดที่ควรทำคือเรียนรู้ / ใช้ คำสั่ง Vim มาตรฐานให้มากที่สุด ฉันทำการแมปหลักหลาย ๆ ตัว แต่พยายามหา Vim ที่เป็นทางเลือกมาตรฐาน และมันก็ค่อนข้างเร็ว สิ่งหนึ่งที่ผมทำคือแผนที่<esc>ที่จะ;jทำให้การทำแผนที่ NR 1 ของคุณเป็นเรื่องง่ายเหมือน;jIและไม่มี ;jA2
โจ๊ก

6

ไม่ใช่คำตอบที่สมบูรณ์ แต่คุณทราบหรือไม่ว่า Vim ที่เรียกว่า " โหมดง่าย " ( vim -y)? มันอยู่ในโหมดแก้ไขเสมอโดย defaut และทำสิ่งที่คุณต้องการเป็นจำนวนมากและไม่ต้องการให้คุณติดตั้งหรือปรับแต่งอะไรเลย มันทำ CTRL-A, C, V, X, Y ฯลฯ จากรายการคีย์ :

Key mappings:
    <Down>      moves by screen lines rather than file lines
    <Up>        idem
    Q           does "gq", formatting, instead of Ex mode
    <BS>        in Visual mode: deletes the selection
    CTRL-X      in Visual mode: Cut to clipboard
    <S-Del>     idem
    CTRL-C      in Visual mode: Copy to clipboard
    <C-Insert>  idem
    CTRL-V      Pastes from the clipboard (in any mode)
    <S-Insert>  idem
    CTRL-Q      do what CTRL-V used to do
    CTRL-Z      undo
    CTRL-Y      redo
    <M-Space>   system menu
    CTRL-A      select all
    <C-Tab>     next window, CTRL-W w
    <C-F4>      close window, CTRL-W c

เวอร์ชันที่ทรงพลังกว่านี้คือCreamซึ่งจะทำการแมปปุ่มอื่น ๆ อีกมากมายและทำให้คำสั่งพื้นฐานคล้ายกับโปรแกรมแก้ไขอื่น ๆ ที่คุณอาจคุ้นเคย

นอกจากนี้ยังมีปลั๊กอินVimacsซึ่งเปิดใช้งานการแม็ปคีย์ emacs ทั่วไปทั้งหมด ติดตั้งง่ายและอาจทำสิ่งที่คุณต้องการ (ฉันไม่เคยลอง)


+1 :-) ที่น่าสนใจมากฉันอ่าน / ทดสอบลิงก์ทั้งหมดของคุณ ... ฉันจะให้ข้อเสนอแนะเพิ่มเติมในภายหลัง ขอบคุณ. ไชโย
โอลิเบร

1
กุญแจของ«โหมดง่าย»ไม่มีส่วนเกี่ยวข้องกับ Emacs แต่« vimacs »ดูเหมือนจะเป็นสิ่งที่น่าสนใจ ฉันเพิ่งติดตั้งและแม้จะอายุมาก แต่ก็ยังใช้งานได้
Hi-Angel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.