深入淺出了解Linux和MacOS終端大小寫敏感問題(附代碼)

之前的文章《一文講解ajax實(shí)現(xiàn)無刷新上傳和下載(代碼詳解)》中,給大家了解了ajax實(shí)現(xiàn)無刷新上傳和下載。下面本篇文章給大家了解linuxmacos終端大小寫敏感問題,伙伴們來看看吧。

深入淺出了解Linux和MacOS終端大小寫敏感問題(附代碼)

Linux和MacOS終端提示大小寫不敏感

打開終端,并cd到用戶home目錄,輸入:

echo?"set?completion-ignore-case?on"?>>?.inputrc

關(guān)閉再重新打開終端即可

如果你只想快速解決上面的問題,直接看第三部分即可。

inputrc 文件介紹

bash和其它大多數(shù)shell使用Readline庫作為其輸入相關(guān)的庫。Readline庫有一些默認(rèn)的鍵盤映射,除此之外,也可以通過修改inputrc文件來定制鍵盤映射。

inputrc文件時(shí)Readline庫的啟動文件,當(dāng)使用Readline作為輸入庫的程序啟動時(shí),它會自動讀取inputrc配置文件,初始化自定義的鍵盤映射。

inputrc文件的位置由shell的環(huán)境變量INPUTRC控制,如果該變量沒有設(shè)置,缺省的inputrc文件的路徑是~/.inputrc。

如果該文件~/.inputrc不存在,就會使用系統(tǒng)級(對所有用戶生效)的inputrc文件/etc/inputrc。如果某個(gè)用戶需要修改系統(tǒng)默認(rèn)的 inputrc配置,可以改動~/.inputrc,這樣會覆蓋系統(tǒng)的默認(rèn)配置。

關(guān)于如何編輯inputrc文件的信息,運(yùn)行info bash,參考bash的info頁的Readline Init File這一節(jié),運(yùn)行info readline以參考readline自己的info頁。

inputrc 配置

在inputrc文件中,有兩種配置:一種是inputrc變量,一種是鍵盤映射。 注意,在配置該文件時(shí),注釋必須占單獨(dú)的一行,否則可能會有問題。

inputrc變量配置

變量配置的語法如下:

set?variable?value

常見的變量和配置如下:

completion-ignore-case #如果設(shè)置為開(on),在自動補(bǔ)全時(shí)不區(qū)分大小寫。該配置默認(rèn)是關(guān)。  show-all-if-ambiguous #這個(gè)配置該變了自動補(bǔ)全函數(shù)的默認(rèn)行為。如果設(shè)置為開(on),當(dāng)自動補(bǔ)全的結(jié)果有一個(gè)以上時(shí),會直接列出這些結(jié)果。如果設(shè)置為關(guān)(off),就會提示一個(gè)beep蜂鳴聲,當(dāng)再按下tab時(shí)才會列出自動補(bǔ)全的結(jié)果。默認(rèn)這項(xiàng)配置為關(guān)。  bell-style #Controls?what?happens?when?Readline?wants?to?ring?the?terminal?bell.?If?set?to?‘none’,?Readline?never?rings?the?bell.?If?set?to?‘visible’,?Readline?uses?a?visible?bell?if?one?is?available.?If?set?to?‘a(chǎn)udible’?(the?default),?Readline?attempts?to?ring?the?terminal's?bell.  bind-tty-special-chars #If?set?to?‘on’,?Readline?attempts?to?bind?the?control?characters?treated?specially?by?the?kernel's?terminal?driver?to?their?Readline?equivalents.  comment-begin #The?string?to?insert?at?the?beginning?of?the?line?when?the?insert-comment?command?is?executed.?The?default?value?is?"#". completion-prefix-display-length  #When?set?to?a?value?greater?than?zero,?common?prefixes?longer?than?this?value?are?replaced?with?an?ellipsis?when?displaying?possible?completions. #e.g.?set?completion-prefix-display-length?4  completion-query-items #The?number?of?possible?completions?that?determines?when?the?user?is?asked?whether?the?list?of?possibilities?should?be?displayed.?If?the?number?of?possible?completions?is?greater?than?this?value,?Readline?will?ask?the?user?whether?or?not?he?wishes?to?view?them;?otherwise,?they?are?simply?listed.?This?variable?must?be?set?to?an?integer?value?greater?than?or?equal?to?0.?A?negative?value?means?Readline?should?never?ask.?The?default?limit?is?100.  convert-meta #If?set?to?‘on’,?Readline?will?convert?characters?with?the?eighth?bit?set?to?an?ascii?key?sequence?by?stripping?the?eighth?bit?and?prefixing?an?<esc>?character,?converting?them?to?a?meta-prefixed?key?sequence.?The?default?value?is?‘on’.  disable-completion #If?set?to?‘On’,?Readline?will?inhibit?word?completion.?Completion?characters?will?be?inserted?into?the?line?as?if?they?had?been?mapped?to?self-insert.?The?default?is?‘off’.  editing-mode #The?editing-mode?variable?controls?which?default?set?of?key?bindings?is?used.?By?default,?Readline?starts?up?in?Emacs?editing?mode,?where?the?keystrokes?are?most?similar?to?Emacs.?This?variable?can?be?set?to?either?‘emacs’?or?‘vi’.  echo-control-characters #When?set?to?‘on’,?on?operating?systems?that?indicate?they?support?it,?readline?echoes?a?character?corresponding?to?a?signal?generated?from?the?keyboard.?The?default?is?‘on’.  enable-keypad #When?set?to?‘on’,?Readline?will?try?to?enable?the?application?keypad?when?it?is?called.?Some?systems?need?this?to?enable?the?arrow?keys.?The?default?is?‘off’.  enable-meta-key #When?set?to?‘on’,?Readline?will?try?to?enable?any?meta?modifier?key?the?terminal?claims?to?support?when?it?is?called.?On?many?terminals,?the?meta?key?is?used?to?send?eight-bit?characters.?The?default?is?‘on’.  expand-tilde #If?set?to?‘on’,?tilde?expansion?is?performed?when?Readline?attempts?word?completion.?The?default?is?‘off’.  history-preserve-point #If?set?to?‘on’,?the?history?code?attempts?to?place?the?point?(the?current?cursor?position)?at?the?same?location?on?each?history?line?retrieved?with?previous-history?or?next-history.?The?default?is?‘off’.  history-size #Set?the?maximum?number?of?history?entries?saved?in?the?history?list.?If?set?to?zero,?the?number?of?entries?in?the?history?list?is?not?limited.  horizontal-scroll-mode #This?variable?can?be?set?to?either?‘on’?or?‘off’.?Setting?it?to?‘on’?means?that?the?text?of?the?lines?being?edited?will?scroll?horizontally?on?a?single?screen?line?when?they?are?longer?than?the?width?of?the?screen,?instead?of?wrapping?onto?a?new?screen?line.?By?default,?this?variable?is?set?to?‘off’.  input-meta #If?set?to?‘on’,?Readline?will?enable?eight-bit?input?(it?will?not?clear?the?eighth?bit?in?the?characters?it?reads),?regardless?of?what?the?terminal?claims?it?can?support.?The?default?value?is?‘off’.?The?name?meta-flag?is?a?synonym?for?this?variable.  isearch-terminators #The?string?of?characters?that?should?terminate?an?incremental?search?without?subsequently?executing?the?character?as?a?command.?If?this?variable?has?not?been?given?a?value,?the?characters?<esc>?and?C-J?will?terminate?an?incremental?search.  keymap #Sets?Readline's?idea?of?the?current?keymap?for?key?binding?commands.?Acceptable?keymap?names?are?emacs,?emacs-standard,?emacs-meta,?emacs-ctlx,?vi,?vi-move,?vi-command,?and?vi-insert.?vi?is?equivalent?to?vi-command;?emacs?is?equivalent?to?emacs-standard.?The?default?value?is?emacs.?The?value?of?the?editing-mode?variable?also?affects?the?default?keymap.  mark-directories #If?set?to?‘on’,?completed?directory?names?have?a?slash?appended.?The?default?is?‘on’.  mark-modified-lines #This?variable,?when?set?to?‘on’,?causes?Readline?to?display?an?asterisk?(*)?at?the?start?of?history?lines?which?have?been?modified.?This?variable?is?‘off’?by?default.  mark-symlinked-directories #If?set?to?‘on’,?completed?names?which?are?symbolic?links?to?directories?have?a?slash?appended?(subject?to?the?value?of?mark-directories).?The?default?is?‘off’.  match-hidden-files #This?variable,?when?set?to?‘on’,?causes?Readline?to?match?files?whose?names?begin?with?a?‘.’?(hidden?files)?when?performing?filename?completion,?unless?the?leading?‘.’?is?supplied?by?the?user?in?the?filename?to?be?completed.?This?variable?is?‘on’?by?default.  output-meta #If?set?to?‘on’,?Readline?will?display?characters?with?the?eighth?bit?set?directly?rather?than?as?a?meta-prefixed?escape?sequence.?The?default?is?‘off’.  page-completions #If?set?to?‘on’,?Readline?uses?an?internal?more-like?pager?to?display?a?screenful?of?possible?completions?at?a?time.?This?variable?is?‘on’?by?default.  print-completions-horizontally #If?set?to?‘on’,?Readline?will?display?completions?with?matches?sorted?horizontally?in?alphabetical?order,?rather?than?down?the?screen.?The?default?is?‘off’.  revert-all-at-newline If?set?to?‘on’,?Readline?will?undo?all?changes?to?history?lines?before?returning?when?accept-line?is?executed.?By?default,?history?lines?can?be?modified?and?retain?individual?undo?lists?across?calls?to?readline.?The?default?is?‘off’.  show-all-if-unmodified #This?alters?the?default?behavior?of?the?completion?functions?in?a?fashion?similar?to?show-all-if-ambiguous.?If?set?to?‘on’,?words?which?have?more?than?one?possible?completion?without?any?possible?partial?completion?(the?possible?completions?don't?share?a?common?prefix)?cause?the?matches?to?be?listed?immediately?instead?of?ringing?the?bell.?The?default?value?is?‘off’.  skip-completed-text #If?set?to?‘on’,?this?alters?the?default?completion?behavior?when?inserting?a?single?match?into?the?line.?It's?only?active?when?performing?completion?in?the?middle?of?a?word.?If?enabled,?readline?does?not?insert?characters?from?the?completion?that?match?characters?after?point?in?the?word?being?completed,?so?portions?of?the?word?following?the?cursor?are?not?duplicated.?For?instance,?if?this?is?enabled,?attempting?completion?when?the?cursor?is?after?the?‘e’?in?‘Makefile’?will?result?in?‘Makefile’?rather?than?‘Makefilefile’,?assuming?there?is?a?single?possible?completion.?The?default?value?is?‘off’.  visible-stats #If?set?to?‘on’,?a?character?denoting?a?file's?type?is?appended?to?the?filename?when?listing?possible?completions.?The?default?is?‘off’.</esc></esc>

鍵盤映射配置

配置inputrc變量的語法如下:

keyname:?function-name?or?macro  #keyname必須是英文,可以是Control-u、Control-k等。并且keyname和冒號之間不能有空格,如果有空格會被認(rèn)為是keyname的一部分。keyname的寫法多樣,取決于自己的喜好。 #下面是一些鍵盤映射配置的例子:  Control-u:?universal-argument?C-u?is?bound?to?the?function?universal-argument  Meta-Rubout:?backward-kill-word?M-DEL?is?bound?to?the?function?backward-kill-word  Control-o:?"&gt;?output"?C-o?is?bound?to?run?the?macro?expressed?on?the?right?hand?side?(that?is,?to?insert?the?text?‘&gt;?output’?into?the?line)  Control-j:?menu-complete?C-j?is?bound?to?cycle?through?the?available?tab?completions.  Control-k:?menu-complete-backward?C-k?is?bound?to?cycle?backwards?through?the?available?tab?completions.  "t":?menu-complete?Use?tab?to?cycle?through?all?the?possible?completions.  "C-p":?history-search-backward?Map?control-p?to?allow?search?for?completions?to?the?current?line?from?your?history.?e.g.?type?“git”?and?then?hit?control-p?to?cycle?through?all?the?recent?git?commands.  "ep":?history-search-backward?Map?escape-p?to?allow?search?for?completions?to?the?current?line?from?your?history.?e.g.?type?“git”?and?then?hit?escape-p?to?cycle?through?all?the?recent?git?commands.  "e[A":?history-search-backward?Map?Up?arrow?to?allow?search?for?completions?to?the?current?line?from?your?history.?e.g.?type?“git”?and?then?hit?UP?to?cycle?through?all?the?recent?git?commands.  "e[B":?history-search-forward?Map?Down?arrow?to?allow?search?for?completions?to?the?current?line?from?your?history.?e.g.?type?“git”?and?then?hit?DOWN?to?cycle?back?through?all?the?recent?git?commands.  "C-d":?kill-whole-line?Map?control-d?to?kill?the?whole?line.

設(shè)置MacOS下自動補(bǔ)全不區(qū)分大小寫

通過上面的介紹,解決這個(gè)問題應(yīng)該是綽綽有余了。打開用戶主目錄下的文件~/.inputrc(如果沒有的話,就新建該文件),在其中添加如下配置:

#?設(shè)置自動補(bǔ)全不區(qū)分大小寫 set?completion-ignore-case?on #?當(dāng)有一個(gè)以上自動補(bǔ)全結(jié)果時(shí),直接列出,不用beep提示 set?show-all-if-ambiguous?on

保存該文件,然后,重啟命令行,就會發(fā)現(xiàn)自動補(bǔ)全不區(qū)分大小寫已經(jīng)生效了。 網(wǎng)上好多結(jié)果中,還需要多加一個(gè)下面的配置:

TAB:?menu-complete

這個(gè)配置的目的是,在列出自動補(bǔ)全的結(jié)果之后,再按一次tab鍵,就會自動在自動補(bǔ)全列表中選擇,而不是一直展示自動補(bǔ)全列表。

推薦學(xué)習(xí):Mac OS入門教程Mac OS入門教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享