বাশ ইনলাইন ইনলাইন প্রসারিত কিভাবে?


84

ব্যাশে ইনলাইন ইনলাইনগুলি বাড়ানোর কোনও উপায় আছে কি?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

উত্তর:


107

আপনি টিপতে পারেন Ctrl- Alt- eপাঠ্যরেখার ক্রিয়া সম্পাদন করতে shell-expand-lineযা উপনাম, ইতিহাস এবং শব্দের সম্প্রসারণ করবে। মনে রাখবেন যে কয়েকটি কীবোর্ডে Metaএটি নেই Alt। আপনার Escতখন চাপতে হতে পারে Ctrl-e

ফাংশনগুলি alias-expand-lineএবং history-and-alias-expand-lineডিফল্টরূপে আবদ্ধ হয় না তবে আপনি আপনার ~/.inputrcফাইলের সাথে নিম্নলিখিতগুলির অনুরূপ লাইন যুক্ত করে সেগুলি আবদ্ধ করতে পারেন ।

"\e\C-l": alias-expand-line

যা তৈরি করে Ctrl- Alt- l(লোয়ার কেস "এল") কেবলমাত্র ওরফে এক্সপেনশন সম্পাদন করে ।


অন্যান্য বাশ সম্পূর্ণকরণকে প্রভাবিত না করে আমরা কি তার নামের প্রসারণ <টেব> এ মানচিত্র করতে পারি?
//Fg

2
@ এসডিএফজি: আপনি যদি এটি করেন তবে এটি অন্যান্য সম্পূর্ণতা ভঙ্গ করবে। এটা তোলে পারে (অপরীক্ষিত) কাজ মানচিত্র তৈরি করতে উপরে দেখানো এবং তারপর এই অতিরিক্ত মানচিত্র যোগ ট্যাবের জন্য বিদ্যমান প্রতিস্থাপন: "\C-i": "\e\C-l\e\e"যা ম্যাক্রো উভয় সঞ্চালিত সৃষ্টি alias-expand-lineএবং complete। এটি উপরের আমার উত্তর থেকে বাঁধার উপর নির্ভর করে এবং Esc-Esc এর জন্য ডিফল্ট বাঁধাই স্থানে রয়েছে। আপনি যদি ডিফল্ট সমাপ্তি করতে চান তবে আপনি Esc-Esc করতে সক্ষম হবেন।
ডেনিস উইলিয়ামসন

4
প্রকৃতপক্ষে, ESC C-eবাশের পক্ষে C-x aকাজ করে তবে Zsh এর পক্ষে কাজ করে। ওএস এক্স
তেও

আপনি কেবল জন্য Ctrl + কিছু, যেখানে কিছু "X" কী হতে পারে খুঁজছেন, আপনি কিছু সিস্টেমের মধ্যে ভালো এটা করতে পারেন: Control-x: history-and-alias-expand-line
igordcard

1
@ ওয়েইজুনঝৌ: এটি আপনার উইন্ডো ম্যানেজার এবং আপনার যে কোনও কাস্টম সেটিংসের উপর নির্ভর করে। জিনোমের জন্য উদাহরণস্বরূপ, লক স্ক্রিনটি সুপার + এল।
ডেনিস উইলিয়ামসন

2

আপনি যা চেষ্টা করছেন তা করার এটি আসলে একটি সহজ উপায় হতে পারে ( bashসংস্করণ> = 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

shoptএর manপৃষ্ঠা: https://www.gnu.org/software/bash/manual/html_node/The-Shopt- বুলেটিন এইচটিএমএল


3
এটা ভুল. শেল অপশনগুলি "ডাইরেক্টপ্যান্ড" এবং "প্রসারিত_আলিয়াস" প্রশ্নের নির্দিষ্ট করে যেমন এলিয়াসগুলি ইনলাইন প্রসারণে সহায়তা করে না। জানি না কোন টুপি থেকে "ডাইরেক্টস্প্যান্ড" নেওয়া হয়েছিল ...? ডিফল্টরূপে, "প্রসারিত_আলিয়াস" ইতিমধ্যে সেট করা আছে। আপনি যদি এটি সেট না করে রাখেন, ফলাফলটি মূলত এলিয়াসগুলি কাজ করা থেকে অক্ষম করা হবে (কমান্ড লাইনের ব্যাখ্যার আগে সেগুলি প্রসারিত হয় না)। যেমন একটি উপাধি দেওয়া alias ll='ls -lশেলটি 'll' কে কমান্ড / ফাংশন 'll' হিসাবে ব্যাখ্যা করবে যা সম্ভবত উপস্থিত নেই।
FooF

0

এটা কাজ করে না. তবে আমি অনুমান করছি / আশা করছি আপনি যা করতে চান তা করতে এই জাতীয় কিছু করা যেতে পারে। আপনাকে নিজের সমাপ্তির স্ক্রিপ্ট ব্যবহার করতে হবে। এইভাবে আপনি এটি তৈরি করুন:

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

এখন সম্পূর্ণ bash_completion ফাইল উত্স করুন ( http://caliban.org/bash ) এবং উপরের উল্লিখিত স্ক্রিপ্টটি bash_completion.d ডিরেক্টরিতে একটি ফাইলের মধ্যে রাখুন যে স্ক্রিপ্টটি আপনি url উল্লেখ থেকে পেয়েছেন। যদি এটি কাজ না করে তবে আমাকে জানান।

ধন্যবাদ।


0

সাধারণ সমাধান সমাধানের সন্ধানে zsh ইনস্টল করা লোকেদের জন্য গ্লোবালিয়ারা আপনার বন্ধু হতে পারে

সমস্ত গ্লোব এক্সপ্রেশন, সাব কম্যান্ড এবং উপাধি (গ্লোবাল সহ) প্রসারিত করে।

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

আপনার .zshrc প্লাগইন তালিকায় কেবল "গ্লোবালিয়াস" যুক্ত ইনস্টল করতে

plugins=(... globalias)

তারপরে SPACEআপনি যে কমান্ডটি লিখেছেন তার সম্প্রসারণের জন্য কেবল টিপুন ।

আপনি যদি কেবল কমান্ড লাইনটি না বাড়িয়ে কোনও স্থান সন্নিবেশ করতে চান তবে টিপুন CTRL+SPACE

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