টার্মিনাল পুনর্নির্মাণ সমস্যা সৃষ্টি না করে আমি কীভাবে আমার zsh প্রম্পটে একটি নতুন লাইন রাখতে পারি?


12

আমি আমার zsh প্রম্পট দিয়ে একটি ছোটখাটো (তবে বিরক্তিকর) সমস্যাটি সমাধান করার চেষ্টা করছি। যে সমস্যাটি আমি দেখতে পাচ্ছি তা হ'ল আমি যখন জিইউআই ওএস পরিবেশে টার্মিনালটি ব্যবহার করি (উদাহরণস্বরূপ, টার্মিনাল.এপ বা আইটিર્મ 2 ওএস এক্স 10.7.2 এ) এবং টার্মিনালটির উইন্ডোর আকার পরিবর্তন করি তখন টার্মিনালটি অতিরিক্ত প্রম্পট দিয়ে পুনরায় চিত্রিত হয় ।

আমি ইস্যুটিকে একটি পরিষ্কার .zshrc এ পুনরুত্পাদন করেছি যার মধ্যে নিম্নলিখিত রয়েছে:

export PROMPT=">
"

পরিষ্কার হতে হবে, এটি একটি দুই-লাইন ফাইল। স্ট্রিংয়ে একটি আক্ষরিক নিউলাইন রয়েছে, যা আমি বেশ কয়েকটি ( স্বীকৃত পুরানো ) জায়গায় পড়েছি যাবার উপায় go আমি টার্মিনাল উইন্ডোটির আকার পরিবর্তন না করা পর্যন্ত এটি কাজ করে, যেখানে আমি ডুপ্লিকেট প্রম্পট স্ট্রিংগুলি দিয়ে শেষ করি। উদাহরণস্বরূপ, যদি আমি একটি নতুন উইন্ডো খুলি, আমি দেখতে পাচ্ছি ( *আমার কার্সারের জন্য একটি স্থানধারক ব্যবহৃত হচ্ছে):

Last login: Wed Jan 25 19:05:06 on ttys000
>
*

তারপরে যখন আমি উইন্ডোটিকে আরও ছোট করে তৈরি করি, তখন আমি এগুলি শেষ করি:

Last login: Wed Jan 25 19:05:06 on ttys000
>
>
>
>
*

অতিরিক্ত উল্লিখিত প্রিন্টআউটগুলির সংখ্যা আমি প্রায় উইন্ডো আকারের কতটা পরিবর্তন করি তার আনুপাতিক আনুপাতিক বলে মনে হয়। আমি যদি প্রম্পট স্ট্রিং থেকে নিউলাইনটি সরিয়ে ফেলি তবে সমস্যাটি চলে যায়।

আমি বিভিন্ন জিনিস যেমন চেষ্টা করেছি $(print ">\n")বা নতুন লাইনটি মোড়ানোর চেষ্টা করেছি %{%}। আমি ধরে নিচ্ছি এটির সাথে এটি করার দরকার আছে যে প্রম্পট স্ট্রিংটি প্রকৃতপক্ষে কতটা দীর্ঘকালীন কিছু বা কিছু আঁকছে তা নিউলাইনটি যা কিছু আঁকছে তা বিভ্রান্ত করে। এই সমস্যাটি কি স্থিরযোগ্য বা আমার কেবল এটির সাথেই বাঁচতে হবে?

উত্তর:


13

এই সমস্যাটি কীভাবে জেডএসএইচ পুনরায় আকারগুলির ইভেন্টগুলিতে প্রম্পটকে পুনরায় ছাপায় এবং এর আগেও আমাকে বিরক্ত করেছিল। সমাধানটি হ'ল $PROMPTসিঙ্গল-লাইন তৈরি করা এবং প্রম্পটের প্রথম লাইনটি প্রেমেডএমডি ব্যবহার করে মুদ্রণ করা।

সুতরাং আপনার উদাহরণে এটি সহজভাবে হবে:

precmd() { print ">" }
export PROMPT=""

বা মুদ্রণ বিবৃতিতে প্রম্পট প্রসারণ সহ আরও পরিশীলিত উদাহরণের জন্য -rPপরামিতিগুলি ব্যবহার করুন :

precmd() { print -rP "%~" }
export PROMPT="%# "

যদি আপনার একাধিক প্রাক রেজিস্টার্ড থাকে তবে আপনাকে ব্যবহার করতে হবে add-zsh-hook precmd(দেখুন man zshcontrib)।


1
আমার মতো নবাগতদের জন্য, আপনি এখানে দেখতে পারবেন -rP এর অর্থ: cs.elte.hu/zsh-manual/zsh_17.html । এটি প্রদর্শিত হয় এটি printএকটি জেডএসএইচ-নির্দিষ্ট কমান্ড, এবং গুগলিং "লিনাক্স প্রিন্ট" আপনাকে খুব ভাল ফলাফল দেয় না।
মাইকওয়াইট

printzsh এর অংশ। আপনি এটিতে সহায়তা দেখতে পারেন man zshbuiltins। বাশের নিজস্ব সমতুল্য রয়েছে তবে আমি নিশ্চিত নই যে তারা সামঞ্জস্যপূর্ণ।
জিম স্টুয়ার্ট

10

কিভাবে ভালো কিছু সম্পর্কে:

NEWLINE=$'\n'
PROMPT="Line1${NEWLINE}LINE2"

আমি এই সমাধানটি গৃহীত উত্তরের চেয়ে ভাল। এটি আরও বহনযোগ্য, এবং আমার zsh এবং ব্যাশ পরিবেশের মধ্যে একই স্ক্রিপ্টটি বজায় রাখতে আমাকে অনুমতি দেয়
ভারবোজ করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.