Help us understand the problem. What is going on with this article?

Shellのコマンド履歴に任意のコマンドを残したい

Problem

Interactive filterを使っていたりするとコマンドよりも結果をhistoryに残した方が便利なケースが度々あります。

# 例:fzfで選択したファイルをvimで開く
alias v='_vim_fzf'
_vim_fzf () {
  local file
  file=$(fzf +m -q "$1") && vim "$file"
}

上記の場合、historyを遡っても選んだファイルは出てきません。

Solution

Bashではhistory -sを使います。

_vim_fzf () {
  local file
  file=$(fzf +m -q "$1") && history -s "vim $file" && vim "$file"
}

このように書き直すと、vコマンドの代わりにvim [選んだファイル]が履歴に残るのでCtrl-RやCtrl-Pでファイルを再び開くことが可能になります。

Further Work (Zsh)

Zshではprint -sが相当するそうです。

$ print -s "alternative command"
$ history
# ...
#  99 print -s "alternative command"
# 100 alternative command

問題は上のようにprintコマンド自体も保存されてしまうことです。もっと良い方法があれば教えてくださいmm

harvath
http://stackoverflow.com/users/3891638/cozyconemotel
http://cozyconemotel.hatenablog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした