বাশ হোম / এন্ড / ডিলিট কীটি টিলড সন্নিবেশ করছে, বা যদি এস্কেপ কী এর আগে থাকে, [1 ~ [3 ~


20

ব্যাশে, home/ end/ deleteকী একটি টিলড সন্নিবেশ করছে, বা যদি তার আগে এস্কেপ কী ব্যবহার করে:[1~

সুতরাং আমি টাইপ করি echo hellp, কার্সারটি সরান hel|lpএবং মুছুন এবং টাইপ করুন, আমি পেয়েছি~tilde

এছাড়াও, আমি টাইপ করি echo hellp, এতে কার্সারটি সরান hel|lpএবং এসএসপি টাইপ করুন এবং তারপর মুছুন, এবং আমি পেয়েছি[3~

$ echo hel~lp
hel~lp

$ echo hell[3~o
hell[3~o
~

আমার বাশের সংস্করণ:

$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.

আমি যা চাই তা হ'ল আচরণ cmd.exe:

  1. আমি চাই এসক বর্তমান লাইন / বাফারটি সাফ করুন
  2. আমি চাই হোমটি প্রথম অক্ষরের আগে লাইনটি শুরু করার জন্য কার্সারটি সরানো হোক
  3. আমি চাই শেষের অক্ষরের আগে কার্সারটিকে লাইনটির শেষ প্রান্তে স্থানান্তরিত করা হোক
  4. আমি বর্তমান লাইন / বাফার থেকে পরবর্তী অক্ষর (কার্সারের ডান) মুছতে মুছতে চাই

এটি ঠিক করার জন্য আমার কী সম্পাদনা করতে হবে? এটি কি আপনার ব্যাশে ডিফল্ট?

আপডেট: আমি উইন্ডোজ মেশিনে উইন্ডোজ প্রোগ্রাম চালাচ্ছি, sh.exe (যেমন আপনি উপরে জিএনইউ ব্যাশ দেখতে পাচ্ছেন), এমএসএসির জন্য মিংডব্লিউ সংকলিত:

$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys

উইন্ডোজ, কোন টার্মিনাল এমুলেটর, msys.bat, যদি আমি জানতাম সেটিং প্রতিবেদন করতে কিভাবে, আমি তাদের সেট কিভাবে জিজ্ঞাসা হবে না
ঐচ্ছিক

উত্তর:


22

.inputrcআপনার কোনও ফাইলের মাধ্যমে বাশকে কাস্টমাইজ করুন আপনার /home/username, আপনি ডিফল্টটি অনুলিপি করতে পারেন

cp /etc/inputrc.default   ~/.inputrc

এখানে আমার (মন্তব্য # দিয়ে শুরু)

# Key-bindings for the command-line editor.

# Ask before displaying >50 items
# Since $WINDIR $PATH var can be in $PATH, this could list
# all window exectables in C:\WINDOWS
set completion-query-items 50

# Ignore case for the command-line-completion functionality
# on:  default to a Windows style console
# off: default to a *nix style console
set completion-ignore-case on

# none, visible or audible
set bell-style audible

# disable/enable 8bit input
set meta-flag on
set input-meta on
set output-meta off
set convert-meta on

# visible-stats
# Append a mark according to the file type in a listing
set visible-stats off
set mark-directories on

# Show all instead of beeping first
set show-all-if-ambiguous off

# MSYSTEM is emacs based
$if mode=emacs
    # Common to Console & RXVT
    "\C-?": backward-kill-line          # Ctrl-BackSpace
    "\e[2~": paste-from-clipboard       # "Ins. Key"
    "\e[5~": beginning-of-history       # Page up
    "\e[6~": end-of-history             # Page down

    $if term=msys # RXVT
        "\e[7~": beginning-of-line      # Home Key
        "\e[8~": end-of-line            # End Key
        "\e[11~": display-shell-version # F1
        "\e[15~": re-read-init-file     # F5
    #$endif
    #$if term=cygwin # Console
    $else
        "\e[1~": beginning-of-line      # Home Key
        "\e[4~": end-of-line            # End Key


"\e[3~": delete-char            # Delete Key
#~      "\e\e[D": backward-word         # Alt-LeftArrow
#~      "\e\e[C": forward-word          # Alt-RightArrow
            "\M-\e[D": backward-word            # Alt-LeftArrow
            "\M-\e[C": forward-word         # Alt-RightArrow
    `#~`        "\C-\E[D": backward-word        # Ctrl-LeftArrow, nowork, can't be made to work
    #~`enter preformatted text here`        "\C-\E[C": forward-word         # Ctrl-RightArrow, nowork, can't be made to work
    #~ to see current bindings use    bind -q backward-kill-line
            "\e\e": kill-whole-line        # double/triple escape works :) Esc/Escape to delete current line like cmd.exe

        $endif
    $endif

খুঁজে বের করতে কি বাম পাশে আপনার inputrc টাইপ করতে (পালাবার কোড, যেমন ল্যাপটপ / ডেস্কটপ মধ্যবর্তী বিভিন্ন রকমের হতে পারে ...), প্রম্পট টাইপ প্রয়োজন echo 'তারপর টাইপ করুন Ctrl-Vকী দ্বারা অনুসরণ, মত Home, তারপর টাইপ ' উদাহরণস্বরূপ

$ echo ' home key ^[[1~  '
 home key
~
$ echo ' end key ^[[4~  '
 end key
~
$ echo ' pg up page up ^[[5~ '
 pg up page up
~
$ echo ' pg dn page down ^[[6~ '
 pg dn page down
~

তারপর প্রতিটি প্রতিস্থাপন ^[সঙ্গে \e অ্যাড \M-জন্য Alt তাত্ত্বিক আপনি ব্যবহার চাই \C-জন্য Ctrlকিন্তু এটা বর্তমানে কাজ (Windows সীমাবদ্ধতা) করে

উপলভ্য কমান্ডগুলি (যেমন backward-kill-line) http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Routout_0029 এ তালিকাভুক্ত করা হয়েছে

আপনি যদি বিদ্যমান দেখতে পারেন কীবোর্ড শর্টকাট / দিয়ে বাইন্ডিং bind -pবা

$ bind -q backward-kill-word
backward-kill-word can be invoked via "\M-\C-h", "\M-\C-?".
~
$ bind -q backward-word
backward-word can be invoked via "\M-\M-[D", "\M-b", "\C-\E[[D".
~
$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[H".
~

TERMCAP এর সাথে গণ্ডগোল করবেন না


find / -name 'inputrc.default'আমার মেশিনে কিছুই খুঁজে পাই না। .Inputrc ফাইল পুনরায় লোড করার জন্য ব্যবহার করুন: আমার বাড়ি এবং শেষ কাজ করার জন্য ব্যবহার করা ... :( এছাড়াও, আপনার অবগতির অন্যদের কাছে bind -f ~/.inputrc
aliteralmind

আহ! সংশোধন: আমি আপনার .inputrc ব্যবহার করেছি, $if mode=emacsব্লক ব্যতীত । আমি এই দুটি লাইন যুক্ত, এবং তারা আবার কাজ !! : ডি "\e[1~": beginning-of-line ... "\e[4~": end-of-line
aliteralmind

RHL অন - এ ডিফল্ট / etc / inputrc
Deian

দুর্ভাগ্যক্রমে আমার কাছে একটি ক্লাস্টার মেশিনে সেই ফাইলটিতে লেখার অ্যাক্সেস নেই।
হারমান টুথ্রোট

5

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

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

সংক্ষিপ্তসার: একটি উইন্ডোতে এমনকি সঠিক টার্মিনাল এমুলেটর ব্যবহার করুন বা পঠন শর্টকাটগুলি শিখুন। আমি এখন সবচেয়ে বেশি ব্যবহার করি সেগুলি পরীক্ষা করেছি এবং তারা কাজ করে msys.bat

mingw-get install mintty && mintty

সম্পাদন করা ফাইল হবে হতে /usr/share/terminfo(যা MinGW মধ্যে অস্তিত্ব নেই) - ব্যবহারের tic"কম্পাইল" নিয়ম (যা এমনকি কারণ সবাই জানে যে সমর্থন গুরুতরভাবে বিকল করা হবে অন্তর্ভুক্ত করা হয় না)। যাইহোক, উইন্ডোজ এটিকে এমনকি ব্যবহারের উপযোগী করার জন্য কোনও কার্যকর বিকাশ আমি দেখিনি। এজন্য আপনার প্রথমে একটি সঠিক টার্মিনাল এমুলেটর ব্যবহার করা উচিত। তবে আমি নিশ্চিত যে কোনও সার্জন অস্ত্রোপচারের জন্য রান্নাঘরের ছুরি ব্যবহার করতে সক্ষম হবেন, তবে উইন্ডোজ বিল্ট-ইন কনসোল উইন্ডোজগুলি ব্যবহার করবেন না কেন। শুভকামনা।


4

রিডলাইন স্থাপনের জন্য পরীক্ষা করুন

সাম্প্রতিক ডেবিয়ান / উবুন্টুর একটি সর্বনিম্ন ইনস্টলেশনতে যখন এটি ঘটে , সম্ভবত আপনি readline-commonপ্যাকেজটি ইনস্টল না করে থাকবেন। কেবল প্যাকেজ ইনস্টল করা এটি সমাধান করবে।

ডিমিয়ান স্ট্রেচ টাইপ সহ ডকারে যেমন ls HOME:

$ docker run --rm -it debian:stretch
root@6ae7baea9e5a:/# ls~

$ docker run -it --name=debian-stretch-readline-temp debian:stretch
root@2092cb968232:/# apt-get update
root@2092cb968232:/# apt-get install readline-common

$ docker commit debian-stretch-readline-temp debian-stretch-with-readline
$ docker run --rm -it debian-stretch-with-readline
root@53739343e9f7:/# ls

দয়া করে মনে রাখবেন যে রিডলাইন-সাধারণ ইনস্টল করার পরে এটি কেবলমাত্র নতুন লগইন শেলগুলিতে প্রভাব ফেলবে।


exec bashটার্মিনালটি বের না করে (বর্তমান পাত্রটি পেন্টিটি খেললে প্রয়োজন হতে পারে) টার্মিনালটি ছাড়াই বর্তমান বাশ উদাহরণটি নতুন দিয়ে প্রতিস্থাপনের একটি উপায়।
কেভিন

@ কেভিন যদিও এটি একটি বৈধ বক্তব্য, এখানে প্রশ্নোত্তর প্রসঙ্গে এটির কী সম্পর্ক আছে?
gertvdijk

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

@ কেভিন আহ, ঠিক আছে, তখন আপনার বক্তব্যটি ভালভাবে বুঝেছি। নতুন লগইন শেলটি পাওয়ার অনেকগুলি উপায় রয়েছে, সেগুলির মধ্যে একটি আপনার। :)
জার্মটভিডিজক

2

আমি নিম্নলিখিতগুলিও সহায়ক হিসাবে খুঁজে পেয়েছি: https://wiki.archlinux.org/index.php/Home_and_End_keys_not_working

বিশেষ করে:

যদি আপনার কীগুলি কাজ না করে থাকে তবে এটি হতে পারে কারণ আপনার নির্দিষ্ট টার্মিনালটি এই তালিকায় নেই এসকেপ কোড প্রেরণ করে। প্রথমে আপনাকে কী পালানোর কোডগুলি প্রেরণ করা হচ্ছে তা খুঁজে বের করতে হবে। তাদের দেখতে, আপনি "উদ্ধৃত-সন্নিবেশ" নামে একটি রিডলাইন কমান্ড ব্যবহার করতে পারেন বা শো কী - স্ক্যানকোড কমান্ডটি চালাতে পারেন যা কোনও মূল ভার্ব্যাটিমের মানকে ছাড়িয়ে যায়। উদ্ধৃত-সন্নিবেশকরণের জন্য ডিফল্ট বাইন্ডিংটি হল Ctrl + V।

উদাহরণস্বরূপ, আপনি আপনার টার্মিনালে নিম্নলিখিত সিরিজ ইনপুট দিতে পারেন:

Ctrl+V
Home
Spacebar
Ctrl+V
End

এবং আউটপুট হিসাবে পেতে

$ ^ [[1 1 ~ ^ [[4 ~

^ [আপনার শেলের মধ্যে একটি পালানোর চরিত্র নির্দেশ করে, তাই এর অর্থ হ'ল আপনার হোম কীতে [1 of এর একটি পালানোর কোড রয়েছে এবং আপনার শেষ কীতে [4 of এর একটি এস্কেপ কোড রয়েছে ~ যেহেতু এই পালানোর কোডগুলি ডিফল্ট রিডলাইন কনফিগারেশনে তালিকাভুক্ত নয়, আপনাকে সেগুলি যুক্ত করতে হবে:

"\e[1~": beginning-of-line
"\e[4~": end-of-line

নোট করুন যে রিডলাইন একটি পালানোর অক্ষর নির্দেশ করতে \ e ব্যবহার করে।

আমার জন্য প্রাসঙ্গিক টুকরা এটি ইনপুটক্রিতে লাগিয়েছিল:

"\e[1~": beginning-of-line
"\e[4~": end-of-line
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.