বিভিন্ন vi সম্পাদনা মোডের জন্য বিভিন্ন বাশ প্রম্পট?


113

বাশের সাথে vi মোড (সেট -o vi) ব্যবহার করার সময়, আপনি বর্তমানে যে মোডে আছেন (সন্নিবেশ করান বা কমান্ড) তার উপর নির্ভর করে এমন একটি প্রম্পট পাওয়া ভাল লাগবে। এই সম্পাদনা মোডটি কীভাবে খুঁজে পাওয়া যায়?

বিটিডব্লিউ, জেডএসএইচে এটি সম্ভব হবে বলে মনে হচ্ছে :

bash  prompt 

আমি এই সম্পর্কে কৌতূহলী। বাশ ডকুমেন্টেশনের মাধ্যমে শিকার করা হয়েছে, তবে কিছুই খুঁজে পেল না।
অ্যান্ড্রু ফেরিয়ার

উত্তর:


67

ফ্রেশ ব্যাশ ৪.৩ এবং রিডলাইন .3.৩ এ আপনার ছেলের জন্য কিছু আছে .. চেঞ্জলগ থেকে:

4.  New Features in Readline
j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

সুতরাং নির্বাণ

set show-mode-in-prompt on

ইন / ইত্যাদি / ইনপুটসিআর বা ~ / .inputrc (থেক্স স্টুজ) আপনার সমস্ত পঠন-সক্ষম সক্ষম প্রোগ্রামগুলিকে প্রভাবিত করবে;)


এ নিয়ে কোন স্ট্যাটাস? আমি এই জাতীয় কিছু খুঁজে পাওয়ার চেষ্টা করছি (ব্যাশের জন্য নয় তবে আমি ব্যবহার করি এমন অন্যান্য পাঠ্যলাইন ভিত্তিক প্রম্পটের জন্য)। আমি (এই ছাড়া ও নিবন্ধর googling দেখা হয়েছে করেছি অন্য কোন আপডেট খুঁজে পেলাম না আপনি রেফারেন্সড )
মাইক এইচআর

4
কেবল eMPee584 থেকে যুক্ত করা - আপনি যদি 4.3 বা তার বেশি বাশ চালাচ্ছেন তবে নিম্নলিখিতটি আপনার ~ / .inputrc ফাইল সেট-মোড-ইন-প্রম্পটে যুক্ত করুন এটি সম্পাদনা মোডে থাকলে আপনার প্রম্পটের একেবারে বামদিকে একটি + যুক্ত করে , এবং একটি: আপনি যদি কমান্ড মোডে থাকেন।
stooj

3
সুতরাং এই কাজ করে; এই ভিআই-মোড চরিত্রটি যেখানে প্রম্পট করবে সেখানে যাওয়ার কোনও উপায় আছে কি? আপনার যদি মাল্টি-লাইন প্রম্প্টগুলি (কাস্টম) থাকে তবে এটি সব
জেমস মিলস

৪.৩ এর জন্য এটি সর্বদা প্রম্পটের শুরুতে এবং দুর্ভাগ্যবশত, পঠনরেখা কেবল একটি মাল্টলাইন প্রম্পটের শেষ লাইনটি পুনরায় আঁকবে। কার্যকারিতার জন্য "মাল্টলাইন প্রম্পট এবং .inputrc" উত্তরটি দেখুন বা এটির জন্য 4.4 এর সংশোধন সহ বাশ 4.3 প্যাচিংয়ের উত্তর দেখুন।
স্টুডিজেক

20

৪.৪ / রিডলাইন Bash.০ ব্যবহারকারী-স্থিরযোগ্য মোড স্ট্রিংগুলির জন্য সমর্থন যুক্ত করবে

আপনি বিটা সংস্করণ ব্যবহার করে দেখতে পারেন, তবে এই মুহুর্তে এগুলি কিছুটা বগি বলে মনে হচ্ছে। তারা এখনও প্রম্পটে কোথায় মোড সূচকটি ঘটতে চায় (যেখানে আমি মনে করি যে হত্যাকারী বৈশিষ্ট্য) তা উল্লেখ করে এখনও সমর্থন করে না।

আপনি যদি অপেক্ষা করতে না চান এবং একটু সংকলনের ভয় না পান তবে আমি এই কার্যকারিতাটি সমর্থন করে এমন গিথুবকে ব্যাশ 4.3 এর প্যাচ সংস্করণ এবং রিডলাইন 6.3 প্রকাশ করেছি।

প্যাচ করা সংস্করণগুলির সাহায্যে আপনি এই জাতীয় জিনিসগুলি করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

কীভাবে ইনস্টল করবেন সে সম্পর্কে আরও বিশদ https://github.com/calid/bash এ উপলব্ধ


19

গুগল অনুসন্ধান করার পরে, ব্যাশ ম্যান পৃষ্ঠাটি দেখে এবং তারপরে বাশ সোর্স কোডটি (lib / readline / vi_mode.c) দেখার পরে মনে হচ্ছে সন্নিবেশ মোড থেকে কমান্ড মোডে যাওয়ার সময় প্রম্পট পরিবর্তন করার কোনও সহজ উপায় নেই। দেখে মনে হচ্ছে এখানে কারও পক্ষে বাশ উত্স প্যাচ করার কোনও সুযোগ থাকতে পারে যদিও উত্সের মোডগুলি শুরু করার এবং বন্ধ করার জন্য কল রয়েছে।

আপনার পোস্টটি দেখে এটি আমাকে বাশ ভিআই মোড সেটিংয়ে আগ্রহী করে তুলেছে। আমি vi পছন্দ করি এবং কেন কমান্ড লাইনে নেই। তবে দেখে মনে হচ্ছে আমাদের কোনও প্রম্পট পরিবর্তন ছাড়াই sertোকানো মোডে রয়েছে কিনা তা ট্র্যাক করে রাখতে হবে (তাই অনেক ফোরামের পোস্ট বলছে) আপনি যদি ইসি তে না আঘাত করেন তবে আপনি যেটা মূল্যবান তা সর্বদা সন্নিবেশ মোডে থাকবেন। এটিকে একটু সহজ করে তোলে তবে সর্বদা স্বজ্ঞাত নয়।

আমি কোথায় যাচ্ছি তা দেখার আগ্রহী হওয়ায় আমি আপনার প্রশ্নটি উত্সাহিত করছি।


7

মাল্টলাইন প্রম্পট এবং .inputrc

Inputrc একটি শো করার জন্য একটি বিকল্প আছে +সন্নিবেশ এবং :, স্বাভাবিক মোডের জন্য যোগ করে set show-mode-in-prompt on~/.inputrcযেমন eMPee584 লিখেছেন, কিন্তু এই প্রম্পট (ব্যাশ এবং readline এর পুরোনো সংস্করণগুলি সঙ্গে) একাধিক লাইন সঙ্গে ভাল কাজ করে না।

সমাধানটিতে একটি একক লাইন PS1( >) থাকে এবং একটি ফাংশন যা প্রম্পটের আগে কিছু প্রতিধ্বনিত করে। এটি ব্যাশ মধ্যে নির্মিত এবং বলা হয় PROMPT_COMMAND

function prompt {
    PS1=' > '
    echo -e "$(date +%R)  $PWD"
}

PROMPT_COMMAND='prompt' 

সাধারণ প্রম্পট স্ট্রিংগুলি প্রিন্টফের প্রতিধ্বনিতে উপলভ্য নয়। -eদোভাষীর কালার কোড করা হয়, এবং এটি যোগ করার প্রয়োজন নেই \[বা \]যা যাহাই হউক না কেন কাজ করে না।

সন্নিবেশ মোড:

20:57   /home/sshbio/dotfiles/bash
+ > _

সাধারণ মোড:

20:57   /home/sshbio/dotfiles/bash
: > _

ট্যাব টিপে , কেবল পিএস 1 পুনরাবৃত্তি করা হয়েছে, যা আমার জন্য অর্থবোধ করে:

20:57   /home/sshbio/dotfiles/bash
+ > ls _
bashrc      bash_profile     inputrc
+ > ls _

পূর্বরূপ (উৎস)


যদি রঙগুলিতে vi-cmd-mode-stringবা ব্যবহার করে থাকে তবে vi-ins-mode-stringএগুলি দ্বারা উপসর্গ করা উচিত \1এবং পোস্টফিক্সিং করা উচিত \2এখানে দেখুন । এছাড়াও, \[এবং \[এখনও নির্গত হওয়া উচিত, তবে আপনার প্রয়োজন হবে \\[এবং \\]প্রিন্টফের ভিতরে।
টম হেল

1

এই আমি কি আছে ~/.inputrc

set show-mode-in-prompt on
set vi-ins-mode-string \1\e[34;1m\2└──[ins] \1\e[0m\2
set vi-cmd-mode-string \1\e[33;1m\2└──[cmd] \1\e[0m\2

মোডটি Inোকান এটি নীল রঙের।

└──[ins]

কমান্ড মোড এটি রঙিন হলুদ হয়।

└──[cmd]

খারাপ দিকটি এটি কোনও ttyঅর্থ প্রদর্শন করে না এটি কেবলমাত্র টার্মিনাল এমুলেটরটিতে কাজ করে।


0

আমি বেস ভিআই মোডের জন্যও একটি সূচক পাওয়ার চেষ্টা করি এবং আপনি সকলেই শিখলেন এটি সহজ এবং এটি করার কোনও উপায় নেই।

আমার বর্তমান পদ্ধতিরটি হ'ল: 'এ' চাপুন যখন আমি নিশ্চিত না যে কোন মোডটি is যদি 'এ' বাশ প্রচারের পরে উপস্থিত হয়, আমি শিখি যে আমি 'সংযোজন' মোডে আছি। তারপরে, আমি 'রিটার্ন' হিট করেছি এবং চালিয়ে যাচ্ছি। এটি আমার জন্য ক্ষুদ্র বিরক্তি সমাধানের সহজ উপায়।

যাইহোক, আমি 'ওরফে এ =' ক্যাল ', বা খালি হিটটি দেওয়ার জন্য অন্য কিছু' সামান্য উপযোগিতা।


2
আমার চেয়ে কেবল "এসকে || সি- [" হিট করার জন্য আমার কাছে আরও বোঝা যাবে। তারপরে আপনাকে কী মোডে রয়েছে তা জানার দরকার নেই; বা আপনাকে অপসারণ করতে হবে (বা রিটার্ন টিপুন)
sertোকান

0

এই চিত্রটির মতো মাল্টলাইন প্রম্পটের জন্য

আমার কাজ প্রায় এই রকম

আমার বাশ প্রম্পট

export PS1=" ┌錄 \[\e[32m\]\u\[\e[m\]\[\e[32m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \w \\$ \n "

.inputrc

set show-mode-in-prompt on
set vi-ins-mode-string " └──錄 (ins):"
set vi-cmd-mode-string " └──錄 (cmd):"

আশা করি এটি আপনাকে সাহায্য করবে


0

এর মাধ্যমে বিভিন্ন প্রম্পট এবং কার্সার স্টাইল .inputrc

প্রথমে আপনাকে নিশ্চিত করা উচিত যে আপনি বাশ সংস্করণটি এর চেয়ে বেশি চালাচ্ছেন 4.3:

$ bash --version
GNU bash, version 4.4

তারপরে আপনার নীচের লাইনগুলি রাখুন ~/.inputrc:

#################### VIM ####################
# FOR MORE INFORMATION CHECK:
# https://wiki.archlinux.org/index.php/Readline

# TURN ON VIM (E.G. FOR READLINE)
set editing-mode vi

# SHOW THE VIM MODE IN THE PROMPT (COMMAND OR INSERT)
set show-mode-in-prompt on

# SET THE MODE STRING AND CURSOR TO INDICATE THE VIM MODE
#   FOR THE NUMBER AFTER `\e[`:
#     0: blinking block
#     1: blinking block (default)
#     2: steady block
#     3: blinking underline
#     4: steady underline
#     5: blinking bar (xterm)
#     6: steady bar (xterm)
set vi-ins-mode-string (ins)\1\e[5 q\2
set vi-cmd-mode-string (cmd)\1\e[1 q\2

কমান্ড মোডে, কার্সারটি ব্লক হিসাবে প্রদর্শিত হয়।
সন্নিবেশ মোডে, কার্সারটি উল্লম্ব বার হিসাবে প্রদর্শিত হয়।

প্রম্পটটি নিজেই তখন মোডের উপর নির্ভর করে এর মতো দেখতে পাবেন:

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