রিডলাইনে আমি কীভাবে vi সম্পাদনা মোডে স্যুইচ করব?


16

আমি একটি পঠন পরিবেশে vi সম্পাদনা মোডে স্যুইচ করতে চাই। তবে আমি 'সেট-vi' ব্যবহার করতে চাই না। আমি একটি কীবোর্ড শর্টকাট ব্যবহার করে সাময়িকভাবে স্যুইচ করতে চাই। ম্যান পেজটি বলছে আমি এটি দিয়ে এটি করতে পারি M-C-j। তবে এটি আমার পক্ষে কাজ করে না।

আমি উবুন্টু এবং একটি এক্সটার্ম ব্যবহার করছি। জিনোম-টার্মিনালের অধীনেও কাজ করে না।

উত্তর:


12

আমি নিশ্চিত করতে চাই যে কীবোর্ড ম্যাপিং Meta+ + Control+ + jআসলে আপনার সিস্টেমে সঠিক হয়। আপনি এই কমান্ডটি ব্যাশের বিভিন্ন মোডের জন্য সমস্ত কী-বাইন্ডের তালিকা তৈরি করতে ব্যবহার করতে পারেন। আমার সিস্টেমে কোনও কী-বাইন্ডিং ছিল না।

$ bind -P| grep edit
edit-and-execute-command can be found on "\C-x\C-e".
emacs-editing-mode is not bound to any keys
vi-editing-mode is not bound to any keys

আপনি কি করতে পারেন, যাতে নিম্নলিখিত যে যখন আপনি টাইপ Esc+ + eএটি 2 মোড মধ্যে টগল হবে।

$ set -o emacs
$ bind '"\ee": vi-editing-mode'
$ set -o vi
$ bind '"\ee": emacs-editing-mode'

bindকমান্ড এখন এই দেখায়:

vi মোডে

$ bind -P |grep edit
edit-and-execute-command is not bound to any keys
emacs-editing-mode can be found on "\ee".
vi-editing-mode is not bound to any keys

ইমাস মোডে in

$ bind -P |grep edit
edit-and-execute-command can be found on "\C-x\C-e".
emacs-editing-mode is not bound to any keys
vi-editing-mode can be found on "\ee".

এখন আপনি 2 টি বিভিন্ন মোডের মধ্যে টগল করতে Esc+ ব্যবহার করতে পারেন e


নোট করুন যে টাইপ করার সময় আপনাকে দ্রুত হতে হবে ESC E। যদি আপনি বিরতি দেন তবে আপনি vi- সন্নিবেশ থেকে vi-কমান্ড মোডে চলে যাবেন বা কেবলমাত্র বর্তমান vi কমান্ড বাতিল করবেন।
spelufo

6

বাশ স্পষ্টভাবে এটি এবং কয়েকটি অন্যান্য রিডলাইন শর্টকাটগুলি অক্ষম করে। initialize_readline()বাশ সোর্স কোডটিতে ফাংশনটি দেখুন ( http://www.catonmat.net/download/bashline.c ):

   /* In Bash, the user can switch editing modes with "set -o [vi emacs]",
      so it is not necessary to allow C-M-j for context switching.  Turn
      off this occasionally confusing behaviour. */
   rl_unbind_key_in_map (CTRL('J'), emacs_meta_keymap);
   rl_unbind_key_in_map (CTRL('M'), emacs_meta_keymap);
#if defined (VI_MODE)
  rl_unbind_key_in_map (CTRL('E'), vi_movement_keymap);
#endif

রিডলাইন কনফিগারেশন ফাইল (.inputrc) ব্যবহার করে আমি এই আচরণটি ওভাররাইড করতে সক্ষম বলে মনে হচ্ছে না।


6

~/.inputrcএসএমএলের উত্তরের উপর ভিত্তি করে আমি আমার জন্য কী ব্যবহার শেষ করেছি ।

set show-mode-in-prompt on

set keymap emacs
"\ea": vi-editing-mode

set keymap vi-command
"k": history-search-backward
"j": history-search-forward
"z": emacs-editing-mode
"\ea": emacs-editing-mode

set keymap vi-insert
"\ea": emacs-editing-mode
"\C-l": clear-screen
"\C-e": end-of-line
"\C-k": kill-line

set editing-mode vi

আমি $if mode=বাক্য গঠনটি চেষ্টা করেছিলাম , তবে আমি মনে করি এটি স্থিতিশীলভাবে সমাধান হয়েছে (একসময়, ফাইলটি পড়ার সময়), সুতরাং এটি আমার প্রত্যাশার মতো কার্যকর হয়নি। সুতরাং আমাদের প্রতিটি কীম্যাপে স্যুইচ করতে হবে এবং এর কী বাইন্ডিংগুলি সংশোধন করতে হবে, এমনকি অন্য কোনও ক্যাপম্যাপে সেট করা থাকলেও। শেষে আমি বলব যে মোডটি দিয়ে শুরু করতে চাই।


2

আমি ইমাস-স্টাইলযুক্ত ম্যাপিংগুলি ভিআই মোডে ব্যবহার করার চেষ্টা করেছি। আমি এখানে দিয়ে শেষ করেছি:

set keymap vi-command
"k": history-search-backward
"j": history-search-forward

set keymap vi-insert
"\C-A": beginning-of-line
"\C-B": backward-char
"\C-D": delete-char
"\C-E": end-of-line
"\C-F": forward-char
"\C-K": kill-line
"\C-L": clear-screen
"\C-N": next-history
"\C-P": previous-history
"\C-O": operate-and-get-next

# Enable Readline not waiting for additional input when a key is pressed.
# Needed for the mappings below.
set keyseq-timeout 0

# `yank-last-arg` does not work exactly as in emacs mode
"\e.": yank-last-arg
"\e\177": backward-kill-word
"\e0": digit-argument
"\e1": digit-argument
"\e2": digit-argument
"\e3": digit-argument
"\e4": digit-argument
"\e5": digit-argument
"\e6": digit-argument
"\e7": digit-argument
"\e8": digit-argument
"\e9": digit-argument
"\eb": backward-word
"\ec": capitalize-word
"\ed": kill-word
"\ef": forward-word
"\el": downcase-word
"\en": non-incremental-forward-search-history
"\ep": non-incremental-reverse-search-history
"\et": transpose-words
"\eu": upcase-word
"\ey": yank-pop

# some other useful mappings

"\e/": complete-filename
"\ek": kill-whole-line
"\eo": "\C-v\C-j"
# quickly switch to "normal" mode
"\C-[": vi-movement-mode
# perserve the currently editing line so that we can 
# do something else before restoring it.
"\eg": insert-comment
"\er": "\C-R#\C-A\C-D\C-E"

set editing-mode vi

ম্যান পৃষ্ঠাটি readlineএবং ম্যান পৃষ্ঠার READLINEবিভাগটি পড়তে সহায়ক bash

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.