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

WindowsでfishShell+neovimな環境を構築する

今までWindows標準のターミナルでWSL Ubuntuを操作してましたが、
なにやらHyperというターミナルとfishというシェルが良さげと聞いたので乗り換えました。その時のメモです。
完全に僕が後で見返す用に書いたので駄文ですが優しくしてください()
プラグインなどを入れるたびに更新していく予定です。
WSL Ubuntuの導入が終わったところから始まります。

日本語化

sudo apt update
sudo apt upgrade

# 言語パックのインストール
sudo apt -y install language-pack-ja
# ロケールを日本に
sudo update-locale LANG=ja_JP.UTF8
# 再起動
# タイムゾーン設定
sudo dpkg-reconfigure tzdata
# 日本語マニュアルのインストール
sudo apt -y install manpages-ja manpages-ja-dev

pip3のインストール

# pip3のインストール
$ python3 --version
Python 3.6.5

$ sudo apt install python3-pip
$ pip3 -V
pip 9.0.1 from /usr/lib/pyton3/dist-packages (python3.6)

fishのインストール

shellはデフォルトから補完が強力なfishを選びました。

# インストール
$ sudo apt-add-repository ppa:fish-shell/release-2
$ sudo apt update
$ sudo apt install -y fish

プラグインマネージャーのfishermanをインストール

$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman

fishをデフォルトシェルに

$ chsh
Password:
Changing the login shell for sugi
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]: /usr/bin/fish

fishのプラグインを入れる

#プラグイン管理ツールのインストール
> curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

あとは

# fisherで公開されてるプラグイン
 fisher add 0rax/fish-bd
# oh-my-fishで公開されてるプラグイン
fisher add oh-my-fish/theme-agnoster

のようにしてプラグインを導入できます。
また、様々な設定を書き込むための[config.fish]を作成します

vi ~/.config/fish/config.fish

パスを通します。

config.fish
set -g -x PATH /usr/local/bin $PATH

ef でconfig.fishが開くようにしました

alias ef 'vim ~/.config/fish/config.fish'

Hyperのインストール

ターミナルをHyperにします。
公式サイトからexeファイルをダウンロードしてインストールしましょう
https://hyper.is/#installation
shellのvalueをwsl.exeに変更します

shell: 'C:\\Windows\\System32\\wsl.exe',

パスを通す

Windowsの環境変数にパスを通すと、hyperのコマンドが使えるようになる(hyper installなど)

"C:\Users\username\AppData\Local\hyper"

左上の三を押したら出てくるこのメニューでもPATHを通せるらしい

image.png

プラグイン

hyper i [プラグイン名] でインストールするかhyper.jsを[Ctrl + ,]で開いてplugins[],に書き込みます。

plugins: [
   'hyper-opacity', //半透明ウィンドウ 
   'hyperterm-overlay', //最前面配置
   'hyper-pane', //ペインの扱いをいい感じにする
   'hyper-tab-icons-plus', //タブにアイコンが出る
   'hyper-statusline', //下にフォルダ階層などを出す
   'hyper-search', // Ctrl+Tab+Fで検索
   // 'hyper-pokemon',
   'hyperlinks', //リンクを踏めるように
   'hyper-ayu', //テーマ
   'gitrocket', //git pushした時にロケットが上がる
  ],

コピペ

いろいろと設定したのでhyper.jsの中をコピペように晒します。

// Future versions of Hyper may add additional config options,
// which will not automatically be merged into this file.
// See https://hyper.is #cfg for all currently supported options.

module.exports = {
  config: {
    // choose either `'stable'` for receiving highly polished,
    // or `'canary'` for less polished but more frequent updates
    updateChannel: 'stable',

    // default font size in pixels for all tabs
    fontSize: 14,

    // font family with optional fallbacks
    fontFamily: 'Cica, Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace',

    // default font weight: 'normal' or 'bold'
    fontWeight: 'normal',

    // font weight for bold characters: 'normal' or 'bold'
    fontWeightBold: 'bold',

    // terminal cursor background color and opacity (hex, rgb, hsl, hsv, hwb or cmyk)
    cursorColor: 'rgba(248,28,229,0.8)',

    // terminal text color under BLOCK cursor
    cursorAccentColor: '#000',

    // `'BEAM'` for |, `'UNDERLINE'` for _, `'BLOCK'` for █
    cursorShape: 'BLOCK',

    // set to `true` (without backticks and without quotes) for blinking cursor
    cursorBlink: true,

    // color of the text
    foregroundColor: '#fff',

    // terminal background color
    // opacity is only supported on macOS
    backgroundColor: '#000',

    // terminal selection color
    selectionColor: 'rgba(248,28,229,0.3)',

    // border color (window, tabs)
    borderColor: '#333',

    // custom CSS to embed in the main window
    css: '',

    // custom CSS to embed in the terminal window

    // if you're using a Linux setup which show native menus, set to false
    // default: `true` on Linux, `true` on Windows, ignored on macOS
    showHamburgerMenu: '',

    // set to `false` (without backticks and without quotes) if you want to hide the minimize, maximize and close buttons
    // additionally, set to `'left'` if you want them on the left, like in Ubuntu
    // default: `true` (without backticks and without quotes) on Windows and Linux, ignored on macOS
    showWindowControls: '',

    // custom padding (CSS format, i.e.: `top right bottom left`)
    padding: '12px 14px',

    // the full list. if you're going to provide the full color palette,
    // including the 6 x 6 color cubes and the grayscale map, just provide
    // an array here instead of a color map object
    colors: {
      black: '#000000',
      red: '#C51E14',
      green: '#1DC121',
      yellow: '#C7C329',
      blue: '#0A2FC4',
      magenta: '#C839C5',
      cyan: '#20C5C6',
      white: '#C7C7C7',
      lightBlack: '#686868',
      lightRed: '#FD6F6B',
      lightGreen: '#67F86F',
      lightYellow: '#FFFA72',
      lightBlue: '#6A76FB',
      lightMagenta: '#FD7CFC',
      lightCyan: '#68FDFE',
      lightWhite: '#FFFFFF',
    },

    // the shell to run when spawning a new session (i.e. /usr/local/bin/fish)
    // if left empty, your system's login shell will be used by default
    //
    // Windows
    // - Make sure to use a full path if the binary name doesn't work
    // - Remove `--login` in shellArgs
    //
    // Bash on Windows
    // - Example: `C:\\Windows\\System32\\bash.exe`
    //
    // PowerShell on Windows
    // - Example: `C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`
    shell: 'C:\\Windows\\System32\\wsl.exe',

    // for setting shell arguments (i.e. for using interactive shellArgs: `['-i']`)
    // by default `['--login']` will be used
    shellArgs: [],

    // for environment variables
    env: {LANG: 'ja_JP.UTF-8'},

    // set to `false` for no bell
    bell: 'SOUND',

    // if `true` (without backticks and without quotes), selected text will automatically be copied to the clipboard
    copyOnSelect: true,

    // if `true` (without backticks and without quotes), hyper will be set as the default protocol client for SSH
    defaultSSHApp: true,

    // if `true` (without backticks and without quotes), on right click selected text will be copied or pasted if no
    // selection is present (`true` by default on Windows and disables the context menu feature)
    // quickEdit: true,

    // URL to custom bell
    // bellSoundURL: 'http://example.com/bell.mp3 ',

    // for advanced config flags please refer to https://hyper.is/#cfg 
    overlay: {
      alwaysOnTop: true,
      animate: false,
      hasShadow: false,
      hideDock: true,
      hideOnBlur: false,
      hotkeys: ['Ctrl+F12', 'HOME'],
      position: 'right',
      primaryDisplay: false,
      resizable: true,
      startAlone: true,
      startup: true,
      size: 0.5,
      tray: true,
      unique: false,
    },

  /*  pokemon: 'random', // Define your favorite pokemon theme
    pokecursor: 'true', // Activate your theme's pokecursor
    pokemonSyntax: 'dark', // Define the color of the terminal tabs
    unibody: 'false', // Define the color of the Hyper window header
    poketab: 'true', // Deactivate your theme's poketab */

    opacity: {
      focus: 0.8,
      blur: 0.65,
    }
  },

  // a list of plugins to fetch and install from npm
  // format: [@org/]project[#version]
  // examples:
  //   `hyperpower`
  //   `@company/project`
  //   `project#1.0.1`
  plugins: [
'hyper-opacity',
'hyperterm-overlay',
'hyper-pane',
'hyper-tab-icons-plus',
'hyper-statusline',
'hyper-search',
// 'hyper-pokemon',
'hyperlinks',
'hyper-ayu',
  ],

  // in development, you can create a directory under
  // `~/.hyper_plugins/local/` and include it here
  // to load it and avoid it being `npm install`ed
  localPlugins: [],

  keymaps: {
    // Example
    // 'window:devtools': 'cmd+alt+o',
  },
};

Powerlineのインストール

> pip install --user powerline-shell

フォントを設定

# clone
> git clone https://github.com/powerline/fonts.git --depth=1
# install
> cd fonts
> ./install.sh
# clean-up a bit
> cd ..
> rm -rf fonts

WindowsにSource Code Pro for Powerlineをダウンロードしてインストール
https://github.com/powerline/fonts/tree/master/SourceCodePro

Hyperの hyper.js のFontFamilyを書き換え

 // font family with optional fallbacks
 fontFamily: '"Source Code Pro for Powerline", Consolas, monospace',

[~/.config/fish/config.fish] に追記

> vi ~/.config/fish/config.fish
# 追記
function fish_prompt
    ~/.local/bin/powerline-shell --shell bare $status
end

ターミナルの再起動

コメント 2019-10-02 215531.png

neovimの環境構築

neovimのインストール

> sudo apt update
> sudo apt-get install software-properties-common
> sudo add-apt-repository ppa:neovim-ppa/stable
> sudo apt-get update
> sudo apt-get install neovim

環境変数を設定

~/.config/fish/config.fish
set -x XDG_CONFIG_HOME $HOME/.config
set -x XDG_CACHE_HOME $HOME/.cache

config

設定ファイルを作成

> mkdir ~/.config/nvim
> touch ~/.config/nvim/init.vim
~/.config/nvim/init.vim
set number             "行番号を表示
set autoindent         "改行時に自動でインデントする
set tabstop=2          "タブを何文字の空白に変換するか
set shiftwidth=2       "自動インデント時に入力する空白の数
set expandtab          "タブ入力を空白に変換
set splitright         "画面を縦分割する際に右に開く
set clipboard=unnamed  "yank した文字列をクリップボードにコピー
set hls                "検索した文字をハイライトする

dein.vim でプラグイン管理

> curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
> sh ./installer.sh ~/.cache/dein

init.vimに追記。プラグインのインストールを自動化などした

~/.config/nvim/init.vim
"dein.vim
if &compatible
    set nocompatible
endif
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
if dein#load_state('~/.cache/dein')
  call dein#begin('~/.cache/dein')
  call dein#end()
  call dein#save_state()
endif
filetype plugin indent on
syntax enable

"plugin
if &compatible
  set nocompatible
endif
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
if dein#load_state('~/.cache/dein')
  call dein#begin('~/.cache/dein')
  call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})
  call dein#load_toml('~/.config/nvim/dein_lazy.toml', {'lazy': 1})
  call dein#end()
  call dein#save_state()
endif
filetype plugin indent on
syntax enable

"auto install plugin
 if &compatible
   set nocompatible
 endif
 set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
 if dein#load_state('~/.cache/dein')
   call dein#begin('~/.cache/dein')
   call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})
   call dein#load_toml('~/.config/nvim/dein_lazy.toml', {'lazy': 1})
   call dein#end()
   call dein#save_state()
 endif
 if dein#check_install()
   call dein#install()
 endif
 filetype plugin indent on
 syntax enable

設定ファイルの分割のためにいくつかファイルを作った
あと、tomlファイルに入れたいプラグインを描くことにした

tomlファイル

# dein.tomlはNeovimは起動した際にロードされる
> touch ~/.config/nvim/dein.toml
# dein_lazy.tomlはラグインを使用する際にロードされる
> touch ~/.config/nvim/dein_lazy.toml

各プラグインの設定ファイル

> mkdir ~/.config/nvim/plugins/
> touch ~/.config/nvim/plugins/anzu.vim
> touch ~/.config/nvim/plugins/denite.vim
> touch ~/.config/nvim/plugins/deoplete.vim
> touch ~/.config/nvim/plugins/fugitive.vim
> touch ~/.config/nvim/plugins/gitgutter.vim

ファイルの中に記述したプラグインや設定はgitで管理することにしました。
文章がかさばるので記述内容をこちらでは割愛します。
https://github.com/kakao1839/neovim-config

brewのインストール🍺

sudo apt-get install build-essential curl git m4 ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev
sudo apt-get install gettext
sudo apt install linuxbrew-wrapper

おまけ

🐱( '-' 🐱 )ネコチャン

Powerlineの横に猫を出したい
image.png

config.fish
function fish_prompt
    if [ $status -eq 0 ]
     set status_face ( ~/.local/bin/powerline-shell --shell bare $status) "(=’ω’=) < "
    else
     set status_face (~/.local/bin/powerline-shell --shell bare $status) "(=;ω;=) < "
    end
    echo $status_face
end

参考

https://linuxfan.info/powerline-shell
https://matcha-choco010.net/2018/06/30/wslとhyperを利用した環境を整える/
https://shanpu.hatenablog.com/entry/2019/01/02/214940
https://qiita.com/tamago3keran/items/cdfd66b627b3686846d2#initvim-の参考例
https://public-constructor.com/terminal-fish-setup/
https://futurismo.biz/archives/6087
https://orako-column.com/fish-shell/
https://github.com/oh-my-fish/theme-bobthefish

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
ユーザーは見つかりませんでした