<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: hotoolong</title>
    <description>The latest articles on DEV Community by hotoolong (@hotoolong).</description>
    <link>https://dev.to/hotoolong</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F370939%2Fd42cf056-fc2c-4116-bcb6-9ae219647042.jpeg</url>
      <title>DEV Community: hotoolong</title>
      <link>https://dev.to/hotoolong</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hotoolong"/>
    <language>en</language>
    <item>
      <title>Make git status and gh easier to use with fzf</title>
      <dc:creator>hotoolong</dc:creator>
      <pubDate>Thu, 30 Apr 2020 13:55:18 +0000</pubDate>
      <link>https://dev.to/hotoolong/make-git-status-and-gh-easier-to-use-with-fzf-4pl3</link>
      <guid>https://dev.to/hotoolong/make-git-status-and-gh-easier-to-use-with-fzf-4pl3</guid>
      <description>&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;The gh command has been released to make it easier to check out PRs.&lt;br&gt;
I reviewed the flow of git add, commit, and push in my usual fish shell.&lt;/p&gt;

&lt;p&gt;I used to use PECO before, but FZF's PREVIEW seemed convenient, so I&lt;br&gt;
I tried using FZF to make GH and git status easier to use.&lt;/p&gt;

&lt;p&gt;I used to use PECO before, but FZF's PREVIEW seemed convenient, so I&lt;br&gt;
I'm using PREVIEW and working with GH to improve it.&lt;br&gt;
BIND of FZF also seems to be useful, so I tried to use it while I was looking into it.&lt;/p&gt;
&lt;h2&gt;
  
  
  The version of the command used.
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;command&lt;/th&gt;
&lt;th&gt;version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;gh&lt;/td&gt;
&lt;td&gt;0.6.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fish&lt;/td&gt;
&lt;td&gt;3.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git&lt;/td&gt;
&lt;td&gt;2.26.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fzf&lt;/td&gt;
&lt;td&gt;0.21.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bat&lt;/td&gt;
&lt;td&gt;0.13.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Check the issue
&lt;/h3&gt;

&lt;p&gt;It looks like you can do the same thing with zsh and bash, but&lt;br&gt;
All of them are created by the function of the fish shell.&lt;/p&gt;

&lt;p&gt;The first is the function that displays a list of issues.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;function &lt;/span&gt;fzf_git_issue
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; query &lt;span class="o"&gt;(&lt;/span&gt;commandline &lt;span class="nt"&gt;--current-buffer&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nv"&gt;$query&lt;/span&gt;
    &lt;span class="nb"&gt;set &lt;/span&gt;fzf_query &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  end

  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; base_command gh issue list &lt;span class="nt"&gt;--limit&lt;/span&gt; 100
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; bind_commands &lt;span class="s2"&gt;"ctrl-a:reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt; --state all)"&lt;/span&gt;
  &lt;span class="nb"&gt;set &lt;/span&gt;bind_commands &lt;span class="nv"&gt;$bind_commands&lt;/span&gt; &lt;span class="s2"&gt;"ctrl-o:reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt; --state open)"&lt;/span&gt;
  &lt;span class="nb"&gt;set &lt;/span&gt;bind_commands &lt;span class="nv"&gt;$bind_commands&lt;/span&gt; &lt;span class="s2"&gt;"ctrl-c:reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt; --state closed)"&lt;/span&gt;
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; bind_str &lt;span class="o"&gt;(&lt;/span&gt;string &lt;span class="nb"&gt;join&lt;/span&gt; &lt;span class="s1"&gt;','&lt;/span&gt; &lt;span class="nv"&gt;$bind_commands&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; out &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nv"&gt;$base_command&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
    fzf &lt;span class="nv"&gt;$fzf_query&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Open issue list &amp;gt;'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--preview&lt;/span&gt; &lt;span class="s2"&gt;"gh issue view {1}"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--bind&lt;/span&gt; &lt;span class="nv"&gt;$bind_str&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--header&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'C-a: all, C-o: open, C-c: closed'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;
    &lt;span class="k"&gt;return
  &lt;/span&gt;end
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; issue_id &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{ print $1 }'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  commandline &lt;span class="s2"&gt;"gh issue view -w &lt;/span&gt;&lt;span class="nv"&gt;$issue_id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  commandline &lt;span class="nt"&gt;-f&lt;/span&gt; execute
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use &lt;code&gt;gh&lt;/code&gt; to list open issue lists and feed them to fzf.&lt;br&gt;&lt;br&gt;
The contents of the &lt;code&gt;gh issue view&lt;/code&gt; are shown in the preview of &lt;code&gt;fzf&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
Basically, you can check it from the CLI, check the details, and press Enter to open the browser.  &lt;/p&gt;

&lt;p&gt;By default, only open issues are allowed to be checked, and&lt;br&gt;&lt;br&gt;
If you want to check the status of an issue is closed, you can use &lt;code&gt;Ctrl-c&lt;/code&gt; to refresh the list.&lt;br&gt;&lt;br&gt;
Similarly, if you want to check the status of everything, you can use &lt;code&gt;Ctrl-a&lt;/code&gt; to refresh it.  &lt;/p&gt;

&lt;p&gt;Enter on the selected issue so that it can be viewed in the browser.&lt;/p&gt;
&lt;h3&gt;
  
  
  Check the PR
&lt;/h3&gt;

&lt;p&gt;The PR confirmation is basically the same as the issue.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;function &lt;/span&gt;fzf_git_pull_request
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; query &lt;span class="o"&gt;(&lt;/span&gt;commandline &lt;span class="nt"&gt;--current-buffer&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nv"&gt;$query&lt;/span&gt;
    &lt;span class="nb"&gt;set &lt;/span&gt;fzf_query &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  end

  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; base_command gh &lt;span class="nb"&gt;pr &lt;/span&gt;list &lt;span class="nt"&gt;--limit&lt;/span&gt; 100
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; bind_commands &lt;span class="s2"&gt;"ctrl-a:reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt; --state all)"&lt;/span&gt;
  &lt;span class="nb"&gt;set &lt;/span&gt;bind_commands &lt;span class="nv"&gt;$bind_commands&lt;/span&gt; &lt;span class="s2"&gt;"ctrl-o:reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt; --state open)"&lt;/span&gt;
  &lt;span class="nb"&gt;set &lt;/span&gt;bind_commands &lt;span class="nv"&gt;$bind_commands&lt;/span&gt; &lt;span class="s2"&gt;"ctrl-c:reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt; --state closed)"&lt;/span&gt;
  &lt;span class="nb"&gt;set &lt;/span&gt;bind_commands &lt;span class="nv"&gt;$bind_commands&lt;/span&gt; &lt;span class="s2"&gt;"ctrl-g:reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt; --state merged)"&lt;/span&gt;
  &lt;span class="nb"&gt;set &lt;/span&gt;bind_commands &lt;span class="nv"&gt;$bind_commands&lt;/span&gt; &lt;span class="s2"&gt;"ctrl-a:reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt; --state all)"&lt;/span&gt;
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; bind_str &lt;span class="o"&gt;(&lt;/span&gt;string &lt;span class="nb"&gt;join&lt;/span&gt; &lt;span class="s1"&gt;','&lt;/span&gt; &lt;span class="nv"&gt;$bind_commands&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; out &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nv"&gt;$base_command&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
    fzf &lt;span class="nv"&gt;$fzf_query&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Select Pull Request&amp;gt;'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--preview&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"gh pr view {1}"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--expect&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ctrl-k,ctrl-m &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--header&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'enter: open in browser, C-k: checkout, C-a: all, C-o: open, C-c: closed, C-g: merged, C-a: all'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;
    &lt;span class="k"&gt;return
  &lt;/span&gt;end
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; pr_id &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;2] | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{ print $1 }'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;1] &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'ctrl-k'&lt;/span&gt;
    commandline &lt;span class="s2"&gt;"gh pr checkout &lt;/span&gt;&lt;span class="nv"&gt;$pr_id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    commandline &lt;span class="nt"&gt;-f&lt;/span&gt; execute
  &lt;span class="k"&gt;else if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;1] &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'ctrl-m'&lt;/span&gt;
    commandline &lt;span class="s2"&gt;"gh pr view --web &lt;/span&gt;&lt;span class="nv"&gt;$pr_id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    commandline &lt;span class="nt"&gt;-f&lt;/span&gt; execute
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get a list of PRs by using gh.&lt;br&gt;&lt;br&gt;
Because the status is narrowed down to the one of open when this is also the default, the&lt;br&gt;&lt;br&gt;
If you want to check the merged items, you can use &lt;code&gt;Ctrl-g&lt;/code&gt; to display them again.&lt;br&gt;&lt;br&gt;
In the case of PR, you may want to check the initial command with all, especially if you want to see the merged information.&lt;br&gt;&lt;br&gt;
You may want to change the number of items as you use them, but&lt;br&gt;&lt;br&gt;
The default is 30, so it's 100 at one time.&lt;/p&gt;

&lt;p&gt;Here.&lt;br&gt;&lt;br&gt;
You can checkout by &lt;code&gt;Ctrl-k&lt;/code&gt; with &lt;code&gt;gh pr checkout &amp;lt;id of PR&amp;gt;&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
This command is useful. gh It varies.&lt;br&gt;&lt;br&gt;
You can check the PR in your browser and copy the branch name to smooth out the process of switching branches.  &lt;/p&gt;
&lt;h3&gt;
  
  
  check the git status
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;git status&lt;/code&gt; is also made easy to use by fzf.&lt;br&gt;
The following is the function I created.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;function &lt;/span&gt;gst &lt;span class="nt"&gt;--description&lt;/span&gt; &lt;span class="s1"&gt;'git status -s'&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; is_git_dir
    &lt;span class="k"&gt;return
  &lt;/span&gt;end
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; base_command git status &lt;span class="nt"&gt;-s&lt;/span&gt;
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; bind_reload &lt;span class="s2"&gt;"reload(&lt;/span&gt;&lt;span class="nv"&gt;$base_command&lt;/span&gt;&lt;span class="s2"&gt;)"&lt;/span&gt;
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; bind_commands &lt;span class="s2"&gt;"ctrl-a:execute-silent(git add {2})+&lt;/span&gt;&lt;span class="nv"&gt;$bind_reload&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nb"&gt;set &lt;/span&gt;bind_commands &lt;span class="nv"&gt;$bind_commands&lt;/span&gt; &lt;span class="s2"&gt;"ctrl-u:execute-silent(git restore --staged {2})+&lt;/span&gt;&lt;span class="nv"&gt;$bind_reload&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; bind_str &lt;span class="o"&gt;(&lt;/span&gt;string &lt;span class="nb"&gt;join&lt;/span&gt; &lt;span class="s1"&gt;','&lt;/span&gt; &lt;span class="nv"&gt;$bind_commands&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

  &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; out &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nv"&gt;$base_command&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
    fzf &lt;span class="nt"&gt;--exit-0&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--preview&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"[ '??' = {1} ] &amp;amp;&amp;amp; bat --color=always {2} || git diff {2}"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--expect&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ctrl-m,ctrl-r,ctrl-v,ctrl-c &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--bind&lt;/span&gt; &lt;span class="nv"&gt;$bind_str&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--header&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'C-a: add, C-u: unstage, C-c: commit, C-m(Enter): edit, C-r: rm, C-v: mv'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$status&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; and commandline &lt;span class="nt"&gt;-f&lt;/span&gt; repaint&lt;span class="p"&gt;;&lt;/span&gt; and &lt;span class="k"&gt;return

  if &lt;/span&gt;string length &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;
    &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; key &lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;1]
    &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; file &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;2] | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="s1"&gt;'{ print $NF }'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'ctrl-v'&lt;/span&gt;
      commandline &lt;span class="nt"&gt;-f&lt;/span&gt; repaint
      commandline &lt;span class="s2"&gt;"git mv &lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt; "&lt;/span&gt;
    &lt;span class="k"&gt;else if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'ctrl-r'&lt;/span&gt;
      commandline &lt;span class="s2"&gt;"git rm &lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt; "&lt;/span&gt;
      commandline &lt;span class="nt"&gt;-f&lt;/span&gt; execute
    &lt;span class="k"&gt;else if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'ctrl-m'&lt;/span&gt;
      commandline &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$EDITOR&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
      commandline &lt;span class="nt"&gt;-f&lt;/span&gt; execute
    &lt;span class="k"&gt;else if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'ctrl-c'&lt;/span&gt;
      commandline &lt;span class="s2"&gt;"git commit -v"&lt;/span&gt;
      commandline &lt;span class="nt"&gt;-f&lt;/span&gt; execute
    &lt;span class="k"&gt;else
      &lt;/span&gt;commandline &lt;span class="nt"&gt;-f&lt;/span&gt; repaint
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result of git status -s is fed to fzf.&lt;/p&gt;

&lt;p&gt;preview displays files that are not managed by git with bat and files that are managed with &lt;code&gt;git diff &amp;lt;selected files&amp;gt;&lt;/code&gt; to show the differences.&lt;/p&gt;

&lt;p&gt;I'm setting up some commands in FZF's BIND.&lt;br&gt;&lt;br&gt;
Refresh fzf by &lt;code&gt;ctrl-a&lt;/code&gt; to &lt;code&gt;git add &amp;lt;selective file&amp;gt;&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
Refresh fzf with &lt;code&gt;Ctrl-u&lt;/code&gt; to &lt;code&gt;git restore --staged &amp;lt;selected file&amp;gt;&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
Type &lt;code&gt;Ctrl-c&lt;/code&gt; to &lt;code&gt;git commit -v&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
These three operations basically take you to the commit.  &lt;/p&gt;

&lt;p&gt;Also, when looking at the contents of the &lt;code&gt;git status&lt;/code&gt;, there was something that I wanted to fix from diffs and so on, so I changed the&lt;br&gt;&lt;br&gt;
Calling &lt;code&gt;Ctrl-m&lt;/code&gt; or &lt;code&gt;Enter&lt;/code&gt; to edit a file in the editor. In my case, it will be NVIM.  &lt;/p&gt;

&lt;p&gt;I prepare git rm/mv as an attachment, but it seems to want to type a command before doing git status.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;I see a lot of people using FZF's PREVIEW to good effect when I check other people's blogs.&lt;br&gt;
I think it is difficult to fit everything in the CLI, but it seems that it can be done with the CLI as much as possible.&lt;/p&gt;

&lt;p&gt;Especially since BIND hadn't seen anyone mentioning it on their blog&lt;br&gt;
I'd be happy if people would take a look at this and take advantage of it.&lt;/p&gt;

</description>
      <category>fzf</category>
      <category>gh</category>
      <category>git</category>
      <category>fish</category>
    </item>
  </channel>
</rss>
