bash
タブ補完を使用して相対パスを絶対パスに拡張する方法はありますか?
私がこの質問をする理由は、時々ファイルを検索して見つけて、次のようなことがあるからvim
です。
cd /etc
cd apache2
cd sites-available
vim 000-default
その後、別の作業を行い、ディレクトリを変更します。
cd /tmp
ls
cd ~
ls
その後、同じファイルを再編集する必要がありますが、history
ファイルパスが相対的であるため機能しません(または履歴検索)。
現在の解決策
ファイルを頻繁に再利用することを知っている場合は、ファイルを見つけて次のようにフルパスを取得しますrealpath
。
$ realpath 000-default
/etc/apache2/sites-available/000-default
(copy and paste path into next command:)
$ vi /etc/apache2/sites-available/000-default
ガイドライン
それでもコピーして貼り付ける必要があります。私の履歴にファイルのフルパスを取得するより簡単な方法があるべきだと思います。私のオプションは何ですか?
私は相対パスをフルパスに拡張する前に(誤って)いくつかのキーの組み合わせを押したと思います。 Bashでは、次のように入力できることがわかります。
cd /etc
ls bash_*(control+x *)
そして得る:
ls bash.bashrc bash_completion bash_completion.d
それでは、ファイルへのフルパスを使用して履歴内のファイルの操作を保存できるように、相対パスを絶対パスに拡張する方法はありますか?
答え1
私はこれを行う良い方法を見つけることができません。
私がしたことは、$PWD
ファイル名の前に入力して押してTab拡張することだけでした。代わりに++をbash
押す必要があります。CtrlAlteTab
例えば
vi $PWD/000-default
それから
Ctrl+ Alt+e
それから
Enter
答え2
これを行うには、Bashでプログラム可能なタブ補完を使用できます。
function _vim_complete_file() {
IFS=$'\n' read -d '' -a FILES <<< "$( compgen -A file "${COMP_WORDS[$COMP_CWORD]}" )"
IFS=$'\n' read -d '' -a COMPREPLY <<< "$( realpath "${FILES[@]}" )"
}
complete -F _vim_complete_file vim
今すぐ入力するとvim 000
TAB置き換えられます。000
/path/to/000-default
説明する
どのように機能するかは、引数を押すときにbashにcomplete -F _vim_complete_file vim
関数を使用するように指示することです。これにより、TABを押したときにカーソルがあった現在の単語で関数が実行されます。これにより、一致するファイルのリストが返されます。その後、このファイルのリストが渡され、完全修飾パスが生成されます。リストは、シェルが使用可能な完成を探す配列として保存されます。_vim_complete_file
TABvim
compgen -A file
realpath
COMPREPLY
答え3
以前のディレクトリに簡単に戻るために、PushdとPopdの使用を開始できます。http://gnu.org/software/bash/manual/bashref.html#The-Directory-Stack
あなたのコメントを見ましたcdargs
(そうですね。これ)。よく使用するディレクトリには、エイリアスまたは関数を使用します。例えば
alias cgi='pushd /path/to/apache/cgi-bin'
または
docs() { pushd /path/to/apache/docroot/"$1"; }
可能であれば、2番目のフォームが便利です。親よく表示されるサブディレクトリを見つけたら、docs foo
そこに移動してください/path/to/apache/docroot/foo
。欠点は、タブ完成機能を失うことですが、私にとってはそれほど難しくありません。
答え4
Vimで再編集するには、:browse oldfiles
とを確認してください:help oldfiles
。