ইমাস শেল-মোডে স্বতঃপূরণ বাশ


94

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

apt-get in<TAB>

হয়ে যায়

apt-get install

ইমাক্স শেল-মোডে, আমি স্বতঃসংশ্লিষ্টভাবে উত্পন্ন করার পরেও এই স্বয়ংক্রিয়-সমাপ্তি কাজ করে না /etc/bash_completion। উপরের উদাহরণটি inবৈধ apt-getকমান্ড বিকল্পের পরিবর্তে বর্তমান ডিরেক্টরিতে কোনও ফাইলের নাম হিসাবে স্বতঃ-সম্পূর্ণরূপে আটকে থাকে । সম্ভবত, এটি কারণ ইমাস ট্যাব কী-প্রেসটি বাধা দিচ্ছে। আমি কীভাবে স্মার্ট অটো-সম্পূর্ণকরণ সক্ষম করব shell-mode?


ইমাক্সে নতুন কারও জন্য ... ইমাসে অন্যান্য শেল মোড রয়েছে। যেমন eshell-modeট্যাব সমাপ্তি আছে। এখানে আরও তথ্য: মাস্টারিনজেম্যাকস.আর.আর্টিকেলস
রস

4
Eshell এর স্বতঃপূরণ কেবল স্থানীয় ডিরেক্টরিগুলির জন্য কাজ করে, আপনি যদি অন্য কোনও মেশিনে যান তবে আপনি হঠাৎ এই ক্ষমতাটি হারাবেন।
হাজোওন্টা

উত্তর:


96

আমি জানি এই প্রশ্নটি তিন বছরের পুরানো, তবে এটি এমন একটি বিষয় যা আমি সমাধান করতে আগ্রহীও হয়েছি। একটি ওয়েব অনুসন্ধান আমাকে এলিজপের একটি অংশে পরিচালিত করেছিল যা শেল মোডে সমাপ্তির জন্য ইমাসকে ব্যাশ ব্যবহার করে makes এটি যে কোনও ক্ষেত্রেই আমার পক্ষে কাজ করে।

Https://github.com/szermatt/emacs-bash-completion এ এটি পরীক্ষা করে দেখুন ।


6
তিন বছরের পুরানো, তবে এখনও পুরোপুরি প্রাসঙ্গিক, প্রশ্নের উত্তর দেওয়ার সাহস থাকার জন্য +1। ধন্যবাদ!
djhaskin987

4
এটি ইতিমধ্যে melpa melpa.org/########################### ما B شن- কমপ্লিটেশন , ইনস্টলেশন ব্যবহার করে সোজাভাবে ব্যবহার করা হচ্ছে M-x package-list-packages, তবে শেষ পর্যন্ত এটি আমার পক্ষে কার্যকর হয়নি, কেন জানি না, এটি আমার ইমাস (24.3.1) হতে পারে বা bash (4.3.30) সংস্করণ। ডকুমেন্টেশন বলছে "বাশ-সমাপ্তি.এল ওএস এবং বেস সংস্করণের প্রতি বেশ সংবেদনশীল ..." তারপরে এমন একটি তালিকা যেখানে আমার সংস্করণগুলি অনুপস্থিত।
বোকলডো

দুর্ভাগ্যক্রমে ইস্যু # 6 বিচারাধীন এটি CLI সরঞ্জামের বর্তমান ফসলের জন্য এতটা কার্যকর বলে মনে হচ্ছে না।
জেসি গ্লিক

এই সংখ্যাটি 6 কমপক্ষে বেশিরভাগ স্থির / এটির কাজ না করার উদাহরণ> (প্যারাফ্রেসড) হিসাবে বন্ধ ছিল।
ম্যাথু এলভি

20

ইমাস শেল-এ, এটি আসলে ইমশ স্বয়ংক্রিয়ভাবে সম্পন্ন করছে, বাশ নয়। যদি শেল এবং ইম্যাকস সিঙ্কের বাইরে থাকে (যেমন পুশড, পপড বা কিছু ব্যাশ ব্যবহারকারী ফাংশন যা শেলের বর্তমান ডিরেক্টরি পরিবর্তন করে) ব্যবহার করে, তবে স্বয়ংক্রিয়-সমাপ্তি কাজ বন্ধ করে দেয়।

এটি ঠিক করতে, কেবল শেলটিতে 'ডায়ার' টাইপ করুন এবং জিনিসগুলি আবার সিঙ্কে ফিরে আসবে।

আমার .emacs এ আমারও নিম্নলিখিত রয়েছে:

(global-set-key "\M-\r" 'shell-resync-dirs)

তারপরে কেবল এসসি-রিটার্নকে আঘাত করা স্বয়ংক্রিয়ভাবে সমাপ্তির পুনরায় সংযোজন করে।


9
এটি একটি ভিন্ন প্রশ্নের সুন্দর উত্তর!
ক্রিস কনওয়ে

ধন্যবাদ আমি অটোজাম্প ব্যবহার করি এবং ডায়ার্স সিঙ্ক থেকে বেরিয়ে আসার কারণেই সমস্যা।
প্ল্যানকালকাল

ক্রিস: Conway, হ্যাঁ, এই এক: emacs.stackexchange.com/questions/30550/... :-)
unhammer

15

আমি এর উত্তর জানি না। তবে এটি আপনার প্রত্যাশার মতো কাজ না করার কারণ সম্ভবত ইমাস শেলগুলি সম্পূর্ণ হওয়া অভ্যন্তরীণভাবে ইম্যাক্স দ্বারা পরিচালিত হয় (কমেন্ট-ডায়নামিক-সম্পূর্ণ ফাংশন দ্বারা), এবং অন্তর্নির্মিত সেই স্মার্ট সমাপ্তির কার্যাদি নেই।

আমি ভয় করি এটি ঠিক করা সহজ জিনিস নয়।

সম্পাদনা: টার্ম-মোড ব্যবহার করার জন্য এনজেএসএফের পরামর্শ সম্ভবত এটি যতটা ভাল হয়েছে তত ভাল। এটি দিয়ে শুরু করুন

এমএক্স শব্দ
এটি স্ট্যান্ডার্ড ইম্যাক্স বিতরণে অন্তর্ভুক্ত করা হয়েছে (এবং কমপক্ষে উবুন্টু এবং ডেবিয়ানে ইম্যাক্স 21-সাধারণ বা ইমাস্যাক 22-সাধারণ)।


4
ট্যাব সমাপ্তি এর সাথে আরও খারাপ M-x term
ম্যাকান্দ্রে

7

দয়া করে, অন্য মোডটি বিবেচনা করুন M-x term, যেমন আমি ২০১১ সালে সমস্যা হিট করার সময় আমি এটি করেছি। আমি এই প্রশ্নটি সহ বাশ সম্পূর্ণরূপে শেল কাজটি করার জন্য সেই সময়ে ইনেটের সমস্ত প্রচেষ্টা একত্রিত করার চেষ্টা করেছি। তবে বিকল্পের মুখোমুখি হওয়ার পরে term-modeআমি চেষ্টাও করতে চাই না eshell

এটি সম্পূর্ণ টার্মিনাল এমুলেটর, যাতে আপনি মধ্যরাত্রীর কমান্ডারের মতো ভিতরে ইন্টারেক্টিভ প্রোগ্রাম চালাতে পারেন। বা zshসমাপ্তিতে স্যুইচ করুন যাতে আপনি ইমাস কনফিগারেশনে সময় হারাবেন না।

আপনি বিনামূল্যে ব্যাশে টিএবি সম্পূর্ণ করতে পারেন। তবে আরও গুরুত্বপূর্ণ আপনি বর্ধমান বা উপসর্গযুক্ত কমান্ড অনুসন্ধানের মতো পূর্ণ পঠনের শক্তি পান । এই সেটআপ আরও বেশি সুবিধাজনক চেক আমার করা .inputrc , .bashrc , .emacs

এর প্রয়োজনীয় অংশ .inputrc:

# I like this!
set editing-mode emacs

# Don't strip characters to 7 bits when reading.
set input-meta on

# Allow iso-latin1 characters to be inserted rather than converted to
# prefix-meta sequences.
set convert-meta off

# Display characters with the eighth bit set directly rather than as
# meta-prefixed characters.
set output-meta on

# Ignore hidden files.
set match-hidden-files off

# Ignore case (on/off).
set completion-ignore-case on

set completion-query-items 100

# First tab suggests ambiguous variants.
set show-all-if-ambiguous on

# Replace common prefix with ...
set completion-prefix-display-length 1

set skip-completed-text off

# If set to 'on', completed directory names have a slash appended. The default is 'on'.
set mark-directories on
set mark-symlinked-directories on

# If set to 'on', a character denoting a file's type is appended to the
# filename when listing possible completions. The default is 'off'.
set visible-stats on

set horizontal-scroll-mode off

$if Bash
"\C-x\C-e": edit-and-execute-command
$endif

# Define my favorite Emacs key bindings.
"\C-@": set-mark
"\C-w": kill-region
"\M-w": copy-region-as-kill

# Ctrl+Left/Right to move by whole words.
"\e[1;5C": forward-word
"\e[1;5D": backward-word
# Same with Shift pressed.
"\e[1;6C": forward-word
"\e[1;6D": backward-word

# Ctrl+Backspace/Delete to delete whole words.
"\e[3;5~": kill-word
"\C-_": backward-kill-word

# UP/DOWN filter history by typed string as prefix.
"\e[A": history-search-backward
"\C-p": history-search-backward
"\eOA": history-search-backward
"\e[B": history-search-forward
"\C-n": history-search-forward
"\eOB": history-search-forward

# Bind 'Shift+TAB' to complete as in Python TAB was need for another purpose.
"\e[Z": complete
# Cycling possible completion forward and backward in place.
"\e[1;3C": menu-complete                    # M-Right
"\e[1;3D": menu-complete-backward           # M-Left
"\e[1;5I": menu-complete                    # C-TAB

.bashrc(হ্যাঁ! বাশ-এর ​​যে কোনও শব্দ থেকে ড্যাব্রের্ভ রয়েছে ~/.bash_history):

set -o emacs

if [[ $- == *i* ]]; then
  bind '"\e/": dabbrev-expand'
  bind '"\ee": edit-and-execute-command'
fi

.emacs টার্ম বাফারে নেভিগেশনটিকে আরামদায়ক করতে:

(setq term-buffer-maximum-size (lsh 1 14))

(eval-after-load 'term
  '(progn
    (defun my-term-send-delete-word-forward () (interactive) (term-send-raw-string "\ed"))
    (defun my-term-send-delete-word-backward () (interactive) (term-send-raw-string "\e\C-h"))
    (define-key term-raw-map [C-delete] 'my-term-send-delete-word-forward)
    (define-key term-raw-map [C-backspace] 'my-term-send-delete-word-backward)
    (defun my-term-send-forward-word () (interactive) (term-send-raw-string "\ef"))
    (defun my-term-send-backward-word () (interactive) (term-send-raw-string "\eb"))
    (define-key term-raw-map [C-left] 'my-term-send-backward-word)
    (define-key term-raw-map [C-right] 'my-term-send-forward-word)
    (defun my-term-send-m-right () (interactive) (term-send-raw-string "\e[1;3C"))
    (defun my-term-send-m-left () (interactive) (term-send-raw-string "\e[1;3D"))
    (define-key term-raw-map [M-right] 'my-term-send-m-right)
    (define-key term-raw-map [M-left] 'my-term-send-m-left)
    ))

(defun my-term-mode-hook ()
  (goto-address-mode 1))
(add-hook 'term-mode-hook #'my-term-mode-hook)

C-x oটার্মিনাল এমুলেশন মোডে কাজ না করা হিসাবে যে কোনও সাধারণ কমান্ডগুলি আমি এর সাথে কী ম্যাপটি প্রসারিত করেছি:

(unless
    (ignore-errors
      (require 'ido)
      (ido-mode 1)
      (global-set-key [?\s-d] #'ido-dired)
      (global-set-key [?\s-f] #'ido-find-file)
      t)
  (global-set-key [?\s-d] #'dired)
  (global-set-key [?\s-f] #'find-file))

(defun my--kill-this-buffer-maybe-switch-to-next ()
  "Kill current buffer. Switch to next buffer if previous command
was switching to next buffer or this command itself allowing
sequential closing of uninteresting buffers."
  (interactive)
  (let ( (cmd last-command) )
    (kill-buffer (current-buffer))
    (when (memq cmd (list 'next-buffer this-command))
      (next-buffer))))
(global-set-key [s-delete] 'my--kill-this-buffer-maybe-switch-to-next)
(defun my--backward-other-window ()
  (interactive)
  (other-window -1))
(global-set-key [s-up] #'my--backward-other-window)
(global-set-key [s-down] #'other-window)
(global-set-key [s-tab] 'other-window)

মনে রাখবেন যে আমি superকীটি ব্যবহার করি term-raw-mapএবং সম্ভবত অন্য কোনও কীম্যাপ আমার কী বাইন্ডিংগুলির সাথে বিরোধ করে না। superবাম কী থেকে কী তৈরি করতে Winআমি ব্যবহার করি .xmodmaprc:

! To load this config run:
!   $ xmodmap .xmodmaprc

! Win key.
clear mod3
clear mod4

keycode 133 = Super_L
keycode 134 = Hyper_R
add mod3 = Super_L
add mod4 = Hyper_R

আপনার কেবল দুটি কমান্ড মনে রাখা উচিত: C-c C-j- সাধারণ ইমাস সম্পাদনা মোডে প্রবেশ করতে (বাফার পাঠ্যে অনুলিপি দেওয়ার জন্য), C-c C-kটার্মিনাল এমুলেশন মোডে ফিরে যেতে।

মাউস নির্বাচন এবং Shift-Insertহিসাবে হিসাবে কাজ xterm


4
ধন্যবাদ, এই সোনার! বিশেষত .inputrcঅংশ!
চ্যান্টাস

6

মতলি যেমন বলেছেন, এটি কোনও সহজ কাজ নয়, যেহেতু বাশ - নোটিটিং দিয়ে শুরু হয়েছিল এবং ট্যাব কমেন্ট-ডায়নামিক-সম্পূর্ণের সাথে আবদ্ধ।

কেউ সম্ভবত স্থানীয়-সেট-কী দিয়ে শেল-কোমন্ড-হুকের স্ব-সন্নিবেশ-কমান্ডে ট্যাবকে পুনর্নির্দেশ করতে পারে এবং এমএক্স কাস্টমাইজ-ভেরিয়েবল আরইটি স্পষ্ট-বাশ-আরোগুলি দ্বারা -নোটেশন দিয়ে শেল-মোডটি শুরু না করে, তবে আমার সন্দেহ হয় যে এটি অন্যান্য সমস্ত সম্পাদনা দিয়ে ভাল বসবে না।

আপনি টার্ম-মোড চেষ্টা করতে চাইতে পারেন, তবে এতে আরও একটি সমস্যা রয়েছে, কারণ কিছু অন্যান্য নিয়মিত কী-বাইন্ডিং শব্দ-মোড দ্বারা ছাপিয়ে গেছে।

সম্পাদনা: অন্যান্য নিয়মিত কীবিডিংগুলিকে টার্ম-মোড দ্বারা ছাপিয়ে যাওয়ার দ্বারা, আমি সিসি ব্যতীত অন্যটি বোঝাতে চাইছি যা বাফারগুলি স্যুইচ করতে সক্ষম হতে পারে। সুতরাং Cx কে পরিবর্তে বাফারটি মারতে আপনার সিসি সিক্স কে করতে হবে। বা অন্য কোনও বাফার 'সিসি সিএক্স ও' বা 'সিসি সিক্স 2' এ স্যুইচ করতে


স্ব-সন্নিবেশ-কমান্ডটি এটি নয়: এটি ট্যাব-কি-প্রেসটি বাশের কাছে প্রবেশের পরিবর্তে TAB অক্ষর সন্নিবেশ করায়।
ক্রিস কনওয়ে

আমার কাছে টার্ম-মোড কমান্ড নেই এবং এটি কোথায় পাবেন তা আমি বুঝতে পারি না।
ক্রিস কনওয়ে

2

আমি জানি এই পোস্টটি এখন 11 বছরেরও বেশি পুরানো। তবে আমি ইমাসে নেটিভ শেল কমপ্লিটেশন দেওয়ার জন্য একটি ফাংশন তৈরি করেছি। এটি কেবল অন্তর্নিহিত প্রক্রিয়াটিতে একটি ট্যাব কী প্রেরণ করে এবং আউটপুটটিকে বাধা দেয়, সুতরাং এটি শেলটি নিজেই পেল same

https://github.com/CeleritasCelery/emacs-native-shell-complete


কি দারুন! একটা ম্যাজিং! (প্রাথমিক ছাপ পূর্বরূপ উপর ভিত্তি করে।)
ম্যাথু Elvey

1

আমি প্রিলেড ব্যবহার করি এবং যখন আমি মেটা + ট্যাব মারি তা আমার জন্য সম্পূর্ণ।

এছাড়াও, সিআরটিএল + আমি একই জিনিসটি করবো বলে মনে হচ্ছে।


0

আমি হেলম মোড ব্যবহার করি। এটির এই কার্যকারিতা রয়েছে ("ট্যাব" টিপানোর পরে): এখানে চিত্র বর্ণনা লিখুন


-2

আমি ইমাস বিশেষজ্ঞ হওয়ার দাবি করি না তবে এটি আপনার সমস্যার সমাধান করা উচিত:

তৈরি করুন: ~ / .emacs

এটি যুক্ত করুন:

('শেল-কমান্ডের প্রয়োজন) (শেল-কমান্ড-সমাপ্তি-মোড)

ইমাকস শেলটি ধরে রাখে যাতে BASH সেটিংসের মধ্য দিয়ে না যায়। এটি নিজেই EMACS- এর জন্য স্বয়ংক্রিয় সমাপ্তি সেট করবে।


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

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