Linux用のテキスト拡張ツール?


0

ターミナル内のブラケットと引用符を自動的に閉じることができるツールを探しています。たとえば、次のように入力すると

echo "

自動的に展開するはずです

echo ""

カーソルを中央に置きます。

これはすでにvimや他の多くのエディターで実行可能です。ターミナルでも同じ機能を使用したいと思います。

回答:


2

シェルがbashであり、emacs編集モード(set -o emacs)を使用していると仮定すると、これは括弧と二重引用符に関する質問に答えます

そこで何が起こっているのかを説明するために、ここで機能するものを次に示します{}

bind '"{" "\C-v{}\e[D"'

の内部を散歩しましょう'。最初のペアに"は次のものがあります。

{

これは非常に簡単です。左中括弧を次のものに置き換えるだけです。

2番目のペアは次のもので"始まります。

\C-v{}

ここで、開き括弧と閉じ括弧を挿入します。最初に入力したものを追加するのではなく置換するため、両方が必要です。\C-vControl-vそのまま挿入(の略文字、端末キーの簡単な歴史)。これにより、{このバインディングを再度トリガーせずにを挿入できます。最後に、次のものがあります。

\e[D

これは左矢印キーのエスケープコードに過ぎないため、カーソルを中括弧の間に移動します。


これはすてきなことですが、持っている場合set editing-mode vi、オートコンプリート後に挿入モードを終了します。これは非常に迷惑です。
2014年

結構です、これはemacs編集モードだということを私の答えに追加し、あなたに賛成票を差し上げます。
8bittree 14年

1

bashでreadlineのviモードを使用する場合、これを行うより良い方法:

set editing-mode vi
set keymap vi-insert
"\C-b": backward-char
"(": "\C-v()\C-b"
"[": "\C-v[]\C-b"
"{": "\C-v{}\C-b"
"\"": "\C-v\"\C-v\"\C-b"
"\'": "\C-v\'\C-v\'\C-b"

0

私は最終的に以下の5つのbashスクリプトを作成しました。

# terminal_autocomplete_brackets.sh
#!/bin/bash

myw=$(xdotool getactivewindow)
if [[ \
    $(xprop -id ${myw} | egrep 'bash .* Konsole') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*Navigator.*Firefox') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*google-chrome') \
    ]]
then
    xvkbd -xsendevent -text "[]\[Left]" >/dev/null 2>&1
else
    xvkbd -xsendevent -text "["  >/dev/null 2>&1
fi



# terminal_autocomplete_curly.sh
#!/bin/bash

myw=$(xdotool getactivewindow)
if [[ \
    $(xprop -id ${myw} | egrep 'bash .* Konsole') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*Navigator.*Firefox') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*google-chrome') \
    ]]
then
    xvkbd -xsendevent -text "{}\[Left]" >/dev/null 2>&1
else
    xvkbd -xsendevent -text "{" >/dev/null 2>&1
fi



# terminal_autocomplete_parentheses.sh
#!/bin/bash

myw=$(xdotool getactivewindow)
if [[ \
    $(xprop -id ${myw} | egrep 'bash .* Konsole') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*Navigator.*Firefox') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*google-chrome') \
    ]]
then
    xvkbd -xsendevent -text "()\[Left]" >/dev/null 2>&1
else
    xvkbd -xsendevent -text "(" >/dev/null  2>&1
fi




# terminal_autocomplete_quotes.sh
#!/bin/bash

myw=$(xdotool getactivewindow)
if [[ \
    $(xprop -id ${myw} | egrep 'bash .* Konsole') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*Navigator.*Firefox') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*google-chrome') \
    ]]
then
    xvkbd -xsendevent -text "\"\"\[Left]" >/dev/null  2>&1
else
    xvkbd -xsendevent -text "\"" >/dev/null  2>&1
fi



# terminal_autocomplete_squotes.sh
#!/bin/bash

myw=$(xdotool getactivewindow)
if [[ \
    $(xprop -id ${myw} | egrep 'bash .* Konsole') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*Navigator.*Firefox') || \
    $(xprop -id ${myw} | egrep 'WM_CLASS.*google-chrome') \
    ]]
then
    xvkbd -xsendevent -text "''\[Left]" >/dev/null 2>&1
else
    xvkbd -xsendevent -text "'"  >/dev/null 2>&1
fi

次に、xbindkeysを使用して、「 '[{(これら5つのスクリプトのそれぞれにバインドします。これは非常にうまく機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.