ভিএম শেল কমান্ডের মধ্যে কীভাবে .bashrc উপকরণ উপলব্ধ করবেন? (:!…)


99

আমি ম্যাকের উপর ব্যাশ ব্যবহার করি এবং এলিয়াসগুলির মধ্যে একটি এর মতো

alias gitlog='git --no-pager  log -n 20 --pretty=format:%h%x09%an%x09%ad%x09%s --date=short --no-merges'

যাইহোক আমি যখন না

 :! gitlog

আমি পাই

/bin/bash: gitlog: command not found 

আমি জানি আমি .gitconfig এ এর ​​মতো উপকরণ যুক্ত করতে পারি

[alias]
    co = checkout
    st = status
    ci = commit
    br = branch
    df = diff

তবে আমি .gitconfig- এ আমার সমস্ত বাশ উপন্যাস যুক্ত করতে চাই না। এটি DRY নয়।

এর চেয়ে ভাল সমাধান কি আছে?


যদি এলিয়াসগুলি .gitconfig এ থাকে, তবে আপনার বাশের অন্যান্য উপাধিতে আপনাকে সেগুলি পুনরাবৃত্তি করার প্রয়োজন হবে না, এবং গিট ব্যবহার করে এমন সমস্ত কিছু কেবল বাশের পরিবর্তে তাদের জানত। সুতরাং, ডিআরওয়াই প্রশংসনীয়, তবে স্পটও রয়েছে (সত্যের একক পয়েন্ট), এবং আপনার স্পটকে সঠিক জায়গায় পাওয়া মানে ডিআরআই করাও সহজ।
জোনাথন লেফলার


এর সম্ভাব্য ক্রস সাইটের সদৃশ: superuser.com/questions/47821/vim-ignores-aliases
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

উত্তর:


116

.bashrcপারস্পরিক ইন্টারেক্টিভ না থাকলে বাশ আপনার লোড করে না ।

:set shellcmdflag=-icবর্তমান সেশনের জন্য এটি ইন্টারেক্টিভ সেট করতে চালান ।

সেটিংস স্থায়ী করতে set shellcmdflag=-icআপনার .vimrcফাইলের শেষে সেট যুক্ত করুন।

!শেল কমান্ড প্রেরণের আগে একটি ঠুং ঠুং শব্দ ( ) ব্যবহার করুন । উদাহরণস্বরূপ: :! cd folder/


6
আপনার .vimrc ফাইলটি (vim
v

9
এটি ভাল তবে আমার সমস্যা হচ্ছে - যদি আমি ইন্টারেক্টিভ মোডটি সক্ষম করি (i ফ্ল্যাগ), তবে আমি আমার অ্যালিজেড শেল কমান্ডগুলি সূক্ষ্মভাবে সম্পাদন করতে পারি, তবে কমান্ডগুলি কার্যকর করার সাথে সাথেই ভিআইএম প্রস্থান করে যা অনাকাঙ্ক্ষিত। প্রাক্তন, আমি চেষ্টা করেছি: শেলসিএমডিফ্ল্যাগ = -ic সহ ls: [4] +
আটকা পড়ে

6
@ কেভিন: ইন্টারেক্টিভ ব্যাশের সাথে ভিউয়ের স্বাভাবিক আচরণ পাওয়ার কোনও উপায় নেই? (কমান্ডটি কার্যকর করুন, যে কোনও কীটির জন্য অপেক্ষা করুন,
ভিমে

7
আমার জন্য suspended (tty output)git commit
.vimrc

27
ভিমকে সর্বদা একটি ইন্টারেক্টিভ শেল ব্যবহার করতে বললে সমস্যা তৈরি হতে পারে। আপনার ব্যাশ কনফিগারেশনে কী কী উপকরণ স্থাপন করে এবং কীভাবে আপনি এটি এমন কোনও জায়গায় স্থানান্তর করতে পারেন তা নির্ধারণ করার চেয়ে আরও ভাল সমাধান হ'ল এমনকি অ ইন্টারেক্টিভ শেলগুলিতে লোড হওয়া। উদাহরণস্বরূপ, জ্যাশেল কেবল ~/.zshrcইন্টারেক্টিভ শেলগুলির জন্য লোড করে তবে এটি ~/.zshenvসমস্ত শেলের জন্য লোড হয় , তাই আমি আমার উলাম সেটআপটি সেখানে সরিয়ে নিয়েছি এবং এটি এখন ভিমের মধ্যে থেকেই কাজ করে। আরও man zsh(বা আপনার শেলের ম্যান পৃষ্ঠাগুলি) দেখুন।
নাথান লং

84

আমি জানি এই প্রশ্নটি ইতিমধ্যে "উত্তর" ছিল, তবে উত্তরটি নিয়ে আমার সমস্যা আছে। শেল নেই প্রয়োজন তেজ মধ্যে ইন্টারেক্টিভ সেট করতে হবে। ইন্টারেক্টিভ শেল থেকে বেরিয়ে না গিয়ে বিকল্প উত্তরের জন্য এই থ্রেডটি দেখুন।

আপনি যদি অ-ইন্টারেক্টিভ শেলটি চান (ডিফল্ট হিসাবে) তবে ব্যাশ অ্যালিয়াসের প্রসারণ চান তবে আপনার উরফ সংজ্ঞা একটি ফাইলের মধ্যে রাখুন, যেমন .বাশ_আলিয়াস এবং এই ফাইলটিতে স্পষ্টরূপে উপন্যাসের প্রসারণ সক্ষম করুন:

shopt -s expand_aliases  
alias la='ls -la'

তারপরে এটি আপনার .vimrc এ যুক্ত করুন যাতে আপনি প্রতিবার vim এর মধ্যে থেকে শেল কমান্ড চালানোর সময় অ্যালিয়াসস ফাইলটি পড়তে হবে:

let $BASH_ENV = "~/.bash_aliases"

এই সমাধানটি "জাকব" পরামর্শ দিয়েছিলেন। মূলটির জন্য নীচের লিঙ্কটি দেখুন See আমি ম্যাক ওএস এক্স ১০.৯ এ এটি পরীক্ষা করেছি এবং এটি নির্বিঘ্নে কাজ করেছে!

ভিম - ইন্টারেক্টিভ মোডে যখন এলিয়াসগুলি চিনতে পারছেন না?


7
এখন পর্যন্ত সেরা সমাধান। ব্যক্তিগতভাবে, আমি $BASH_ENVআমার .bashrc(যে কোনও কাস্টম ইন্টারেক্টিভ মোড চেকের আগে) বৈকল্পিক সেট করেছি, তাই আমি অ্যাপ্লিকেশন জুড়ে আমার সমস্ত উপকরণ ব্যবহার করতে পারি।
el.atomo

4
এটি সম্ভবত এই পৃষ্ঠার সেরা সমাধান কারণ পরিবর্তনের সুযোগটি ভিমের মধ্যেই সীমাবদ্ধ থাকবে। একজন আরও এগিয়ে যেতে পারে let $BASH_ENV="~/.vim/vim_bash"এবং এটি :!ভিমের মধ্যে সমস্ত আহবানগুলির জন্য ব্যবহৃত হবে ।
তিইইইইইইইইইইইইইইইইইইইইইইইইইইইইজি

দুর্ভাগ্যক্রমে, এটি ম্যাকওএস 10.15.2 ডিফল্ট শেল, zsh এ কাজ করে না।
বেন কুইগলি

8

নোট করুন যে আপনার ব্যাশ ডটফাইলগুলি কীভাবে কনফিগার করা হয়েছে তার উপর নির্ভর করে আপনি -i বিকল্পের পরিবর্তে -l ব্যবহার করতে চাইতে পারেন। এটি শেলটি লগইন শেল হিসাবে চালু করবে।


4
ড্রেফটিম্যাক লিখেছেন: "এটি আমার পক্ষে কাজ করার জন্য, -লিক বিকল্পটি করা দরকার ছিল, অন্যথায় ভিম 'কমান্ডটি পাওয়া যায়নি' ফেরত"
dreftymac

8

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

এর আমার সমাধানটি ছিল .zshrc কে .zshenv- তে অনুলিপি করার মতোই - http://zsh.sourceforge.net/Intro/intro_3.html অনুসারে :

-f বিকল্প সেট না করা থাকলে shell .zshenv 'শেলের সমস্ত অনুরোধের ভিত্তিতে উত্সাহিত হয়। এটিতে কমান্ড অনুসন্ধানের পথ নির্ধারণের জন্য অন্যান্য গুরুত্বপূর্ণ পরিবেশের ভেরিয়েবলগুলি অন্তর্ভুক্ত থাকতে হবে। z .zshenv 'এ এমন কমান্ড থাকা উচিত নয় যা আউটপুট উত্পাদন করে বা শেলটি টিটিটির সাথে সংযুক্ত আছে ume

সুতরাং $ cp ~/.zshrc ~/.zshenvজিনিসটি করবে।


এই জন্য আপনাকে ধন্যবাদ! কেবলমাত্র নোট করে দিতে চেয়েছিলেন যে আপনার কাছে যদি একটি শেল শর্টের অন্যান্য নাম থাকে তবে আপনি কেবল তাদের .zshenv এ উত্স করতে পারেন। ভালো কিছু: . $HOME/.aliases
scifisamurai

2

আমি -i বিকল্পটি সেট করতে খুব স্বাচ্ছন্দ্য বোধ করি না, কারণ এটির কিছুটা প্রভাব রয়েছে এবং আমি প্রায়শই ভিএম থেকে শেলটি ব্যবহার করি। পরিবর্তে আমি যা করব তা হ'ল কিছু:!bash -c ". ~/.alias; gitlog"


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