Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all 5722 articles
Browse latest View live

Vimコマンド集

$
0
0

個人的Vim集(初心者向け)

最近Vimを操作することが多くなってきて、マウス操作にあぐらをかいてきた僕はまだまだ便利なコマンドを知らず都度都度調べながらやっていることが多いため、個人的メモとしてまとめていきたいと思います。

また、調べていて気づいたのですが、同じ操作でもコマンドが複数あるんです!なにがいいのか、などがまだまだわかんないので、とりあえず自分の得たものをまとめていきたいと思います。

[補足]コマンドが増えてきたらカテゴリでテーブルをわけていきたいと思います。

普段使うコマンド一覧(環境:Mac)

操作コマンド左記以外のコマンド
行を追加してInsertモードo
最初の行に移動gg
最後の行に移動G
指定の行に移動 {num}G (num: 数値):{num}
行先頭に移動0
行末尾に移動$
1単語先に移動w
1単語前に移動b
操作のやり直しu
一行コピーyy
複数行コピー{num}yy[※補足1]
一単語コピーyw
次の行にペーストp
前の行にペーストP
コピーしたものを複数回ペースト{num}p
一行削除(「コピー」に対して「カット」に位置する)dd
複数行削除{num}dd[※補足1]
全て削除ggVGd:%d
一単語削除dw
カーソル位置の単語削除x
カーソル位置の前の単語削除X
カーソル位置より後を削除D

削除、コピーの操作は特に、コマンドを組み合わせて使っていますね。一つ一つのコマンドの意味を理解すると、理解が早くすすむと思いました。
思ったより複数のコマンドないじゃないか!と自分にツッコミました。。新しいものを使い次第どんどん更新したいと思います!!

※補足1:複数行を指定する方法

{num}yy{num}ddは、指定したい行数がはっきりわかる時に便利です。ただ、指定したい行数がわからない時には、別の方法を用います。

  • ビジュアルモードで指定する
    1.指定したい最初の行にカーソルを移動する
    2.shift + vでビジュアルモードに変更
    3.コピーしたい範囲を選択する

  • 選択したい部分をマークする
    1.指定したい最初の行にカーソルを移動する
    2.msと入力し、開始位置をマークする
    3.指定したい最後の行までカーソルを移動する
    4.コピーしたい場合はy’s、カットしたい場合はd‘sと入力

マークは、mコマンドというVimのマーク機能を使っています。

更新情報

2020.3.20 記事の作成


行頭の空白を削除

$
0
0

vimの画面において、puttyのターミナルでコピペすると時々行頭にスペースが入るので、それをvimで削除する。

%s/^ *\([^ \t\f\r\n]\)/\1/gc

(編集途中あり)VSCodeっぽい開発環境をvim + tmuxで構築 〜Windows・MacOSで変わらない開発環境を求めて〜

$
0
0

開発環境を構築するうえで重要なこと

2020/3/22時点で、試行錯誤がまだ足りない箇所は編集途中と表示してあります。ただ、公開せずに下書き状態にするのももったいないので一旦公開して安定してきた部分は追記していく予定です。

開発環境を構築する上で、結構重要なのって「この操作って実現できるの?」ってことだと思います。

普段できていることができなくなったらストレスですからね。

ただ、色々試して実際に構築したからわかることなのですが、VSCodeで十分です。というか、VSCodeって偉大だなとさえ思っています。

なぜなら、

  • インストールしたら基本的な機能が揃っている
  • ないものもプラグインを入れればいいので、困らない
  • そして、何より軽い

からです。

並行して移行している期間中は、何度かVSCodeだとやっぱりこの操作楽だよなーということがありました(笑)

そして、ファイラーを使った検索とかはvimのプラグインを使ったほうが速いんだろうなーと思っていたのですが、使い方によって重かったりします・・・
そこらへんはまだまだ知識不足なのでこれから改善していく予定です。

環境

自宅ではMacOS、職場ではWindows10を使っているのでWindows・MacOSで変わらない開発環境を目指します。

  • Windows10
  • MacOS High Sierra

Linux環境では試していないので動くかわかりません・・・

最終的にたどりついた構成

シンプル構成です。
後述しますが、Windowsの端末エミュレーターはHyper + tmuxを使う運用ができなかったため、Git bashを採用しています。

WindowsMac
端末エミュレーターGit bashHyper
端末多重接続ソフトtmuxtmux
シェルbashbash
テキストエディタvimvim
バージョン管理GitGit

この構成にたどりつくまでにやったこと

windows上でlnコマンドなどもLinuxと同様の動きをするようにしたいと思い、WSLに走る。

=> Hyperからwslのbashを使って、wslのbashからローカル環境のVM起動して作業するには結構時間がかかる上に、最後の最後でコケて色々ためしたけどダメで断念・・・あと、仮想環境が絡んでくるとただでさえハードルが高いのに、Windows上のLinux環境からローカル環境のVagrant等でさらにWindows上に仮想環境を構築したりとなると鬼・・・

まあ、最悪lnコマンドはなんとかするとして、次にwindowsでもtmuxを使いたい。端末エミュレーターはHyperがいい!

=> Windowsで端末エミュレーターにHyperを使うとtmuxが動かない・・・色々調べてgit-bash.exeとかmintty.exeとか動く環境だとttyコマンドを打つと、/dev/pty1とか/dev/ttys(これはMacの場合)とか返ってきて、Hyperでシェルにbashを指定した動かない環境だと/dev/cons0とかが返ってくることがわかった。Hyperは端末エミュレーターなのでシェルを指定できるけど、git-bash.exeとかmintty.exeを指定すると別窓で開いてどうにもならなかったので断念・・・

最後は、WindowsではHyperを使うことは素直に諦めました・・・
(諦めるまでに相当粘りました・・・)

最終的に、Windowsではtmuxが動くgit-bash.exeを端末エミュレーターとして使うことにしました。

WindowsとMacでソフトの差はあるものの、操作インターフェースはtmuxとvimに集約されるのでOSが異なってもたぶん快適でしょう。

インストール

Windows

Git for Windows

まずは、Gitを使うのに必要なGit for Windowsをインストールします。
これで、Gitとgit bashとvim(Git for Windows付属)が使える環境が手に入ります。
Git for Windows

スクリーンショット 2020-03-22 1.06.50.png

tmux

Windowsでtmuxを導入するために、pacmanを使います。
pacmanを使うために、MSYS2をインストールします

  1. MSYS2 homepageからmsys2-x86_64-20190524.exeをインストール
    スクリーンショット 2020-03-22 1.07.04.png

  2. C:\msys64\msys2.exeを起動

  3. pacman -S tmuxを実行

  4. C:\msys64\usr\bintmux.exemsys-event-2-1-6.dllC:\Program Files\Git\usr\binにコピーします。

  5. C:\Program Files\Git\git-bash.exeを起動して、tmux -VでバージョンがでればOK

これで、git-bashからtmuxが使えるようになります。

Mac

Homebrew

Macのパッケージマネージャーです。
「homebrew インストール」とかでたくさん出てくるので、インストール方法については割愛。

Hyper

公式サイトからインストール。
Hyper™

vim

Macにデフォルトでvimが付属していますが、バージョンが低いので、Homebrew経由でmacにvimをインストール

brew install vim

git

Macにデフォルトでgitが付属していますが、どうせならパッケージマネージャーで管理したいので、Homebrew経由でmacにgitをインストール

brew install git

設定

今後変わる可能性がありますが、現時点の設定です。

設定ファイルの運用について

設定ファイルはGithubにdotfilesをホスティングして管理してます。
ソフトもすぐにインストールできるもので構成しているので、あとはワンコマンドでdotfilesを展開すればすぐに普段と変わらない環境が出来上がります。

以前、書いたdotfilesに関する記事(WindowsでもMacでも使えるという点が快適ライフを送る上で超重要です。)
挫折しないdotfiles運用 〜Windows・MacOSで使える設定ファイルを目指して〜 - Qiita

私のdotfilesです。日々成長中です。
snyt45/dotfiles

Hyper

hyper.js

基本から変わっている部分だけ。
hyper-material-themeの設定を追加しています。

//////////////////////////////////////// hyper-material-theme//////////////////////////////////////MaterialTheme:{theme:'Palenightr',backgroundOpacity:'0.7',accentColor:'#64FFDA',vibrancy:'dark'},

hyper.jsのクロスプラットフォーム化

windowsではHyperを使わずにGit bashを使うことにしたのでクロスプラットフォーム化は必要なくなりましたが、一応残しておきます。
残念なことにhyper.jsのシェルの設定回りだけWindowsとMacで差が出てきます。

そのため、あらかじめdotfilesの中にWindows用とMac用のhyper.jsを用意しておいて、dotfilesを展開するときに下記シェルスクリプトでWindowsならWindows用、MacならMac用のhyper.jsをホームディレクトリに展開するようにしています。
(これらのファイルはdotfilesのconfig以下に配置しています。)

また、Windowsで起きた事象ですがHyper3.2で~/.hyper.jsを配置してもHyperが.hyper.jsを削除してしまいます。
そのため、Windowsの場合はシェルスクリプト内で展開先を$HOME/AppData/Roaming/Hyper/$HYPER_JSとするとうまくいきました。

新しいバージョンは、古いバージョンの%USERPROFILE%.hyper.jsではなく、%APPDATA%\ Hyper.hyper.jsの設定ファイルを指しているようです。
古い場所から古いファイルを取得し、新しい場所に貼り付けるだけで、すべての設定が元に戻ります。
Hyper 3.0.0 deleted settings/configuration (.hyperjs) · Issue #3594 · zeit/hyper

#!/bin/bash############################################################################### 定数##############################################################################DOTPATH=~/.dotfiles;HYPER_JS=.hyper.js;HYPER_JS_PATH=config/hyper_js_preferences;WINDOWS_HYPER_JS=$HYPER_JS_PATH/.windows.js;OTHER_HYPER_JS=$HYPER_JS_PATH/.other.js;############################################################################### hyper.jsのクロスプラットフォーム化##############################################################################if["$(uname)"=="Darwin"];then
  echo Mac
  ln-snfv"$DOTPATH/$OTHER_HYPER_JS""$HOME/$HYPER_JS"elif["$(expr substr $(uname-s) 1 5)"=="MINGW"];then
  echo Windows
  ln-snfv"$DOTPATH/$WINDOWS_HYPER_JS""$HOME/AppData/Roaming/Hyper/$HYPER_JS"elif["$(expr substr $(uname-s) 1 5)"=="Linux"];then
  echo Linux
  ln-snfv"$DOTPATH/$OTHER_HYPER_JS""$HOME/$HYPER_JS"else
  echo Unknown OS
fi

プラグイン

プラグイン系で使うコマンドです。

# 一覧
hyper list
# インストール
hyper i プラグイン名
# アンインストール
hyper u プラグイン名

入れたプラグイン

  • hyper-material-theme
    • Hyperのマテリアルテーマ
  • hyper-tab-icons-plus
    • タブタイトルにアイコンを表示してくれる
  • hyper-search
    • ターミナル上で検索ができるようになる。

諸事情で入れなかったプラグイン

  • hyperterm-summonは、ショートカットキーでHyperを呼び出す便利なプラグインですが、Windowsでは使えないので入れてないです。
  • hypercwdは、新しいタブを開く際にカレントディレクトリと同じ階層で開く便利なプラグインですが、WindowsでHyperのタブ分割とかのショートカットキーが使えなくなったので入れてないです。
  • キーマップ系もよさげなのでありましたが、開発が止まっていたりデフォルトのキーマップを変えるだけでも済むので入れてないです。
  • キーマップは公式サイトから見れます。hyper.jsで変更もできます。

vim

プラグイン

プラグイン管理には、NeoBundleを使っています。

vimrcに下記のように記述するだけで、vimを開いたときにすぐにプラグインが使える状態になります。
新しくプラグインをインストールするときもvimrcに追記するだけなので、はっきりいって超便利です。

NeoBundleの作成者もこのvimrcの記述を考えた人も神ですね。
こういう誰かの努力のおかげで便利な環境で仕事できるんだなーとしみじみ思いますね。

  • NeoBundleが未インストールであればgit clone
  • 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれる
"----------------------------------------------------------" NeoBundle"----------------------------------------------------------if has('vim_starting')" 初回起動時のみruntimepathにNeoBundleのパスを指定するset runtimepath+=~/.vim/bundle/neobundle.vim/" NeoBundleが未インストールであればgit cloneするif!isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
        echo "install NeoBundle...":call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")endifendifcall neobundle#begin(expand('~/.vim/bundle/'))" インストールするVimプラグインを以下に記述" NeoBundle自身を管理
NeoBundleFetch 'Shougo/neobundle.vim'"============================="" こんな感じでプラグインを記述" NeoBundle 'tpope/vim-fugitive'"============================="call neobundle#end()" 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
NeoBundleCheck

vimrc全体

vimrcについては、まだまだ調整中なので改善の余地は見る人から見たらたくさんあるかと思いますが、
とりあえず、今の状態をはっつけます。

基本的には、コメントを書いているのでざっくりと何をしているかはわかるかと思います。

"----------------------------------------------------------" NeoBundle"----------------------------------------------------------if has('vim_starting')" 初回起動時のみruntimepathにNeoBundleのパスを指定するset runtimepath+=~/.vim/bundle/neobundle.vim/" NeoBundleが未インストールであればgit cloneするif!isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
        echo "install NeoBundle...":call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")endifendifcall neobundle#begin(expand('~/.vim/bundle/'))" インストールするVimプラグインを以下に記述" NeoBundle自身を管理
NeoBundleFetch 'Shougo/neobundle.vim'" vim用のGitコマンドを追加
NeoBundle 'tpope/vim-fugitive'" 末尾の全角半角空白文字を赤くハイライト
NeoBundle 'bronson/vim-trailing-whitespace'" vim 用の統合ユーザインターフェース
NeoBundle 'Shougo/unite.vim'" vimで非同期処理を実現する
NeoBundle 'Shougo/vimproc'" ファイル操作をサポート(unite.vimとvimprocに依存)
NeoBundle 'Shougo/vimfiler'" スクロール操作をなめらかにする
NeoBundle 'yuttie/comfortable-motion.vim'" ウィンドウサイズの変更を簡単・高速にする
NeoBundle 'simeji/winresizer'call neobundle#end()" 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
NeoBundleCheck

"----------------------------------------------------------" ファイルタイプ別のVimプラグイン/インデントを有効にする"----------------------------------------------------------filetype plugin indent on"----------------------------------------------------------" 文字コード"----------------------------------------------------------" ファイル読み込み時の文字コードset encoding=utf-8" Vim Script内でマルチバイト文字を使う設定scriptencoding utf-8" 保存時の文字コードset fileencoding=utf-8" 読み込み時の文字コードの自動判別. 左側が優先されるset fileencodings=ucs-boms,utf-8,euc-jp,cp932
" 改行コードの自動判別. 左側が優先されるset fileformats=unix,dos,mac
" □や○文字が崩れる問題を解決set ambiwidth=double

"----------------------------------------------------------" スワップファイルを作成しない"----------------------------------------------------------" viminfo ファイルを作成しないset viminfo=" swap ファイルを作成しないsetnoswapfile" バックアップファイルを作成しないset nobackup

"----------------------------------------------------------" クリップボード機能"----------------------------------------------------------" vimのヤンク、プット有効" Ctrl+c、Ctrl+v有効set clipboard=unnamed,autoselect

"----------------------------------------------------------" 行番号の表示"----------------------------------------------------------setnumber"----------------------------------------------------------" ステータスライン"----------------------------------------------------------" ステータスラインを常に表示set laststatus=2" 現在のモードを表示set showmode
" 打ったコマンドをステータスラインの下に表示set showcmd
" ステータスラインの右側にカーソルの位置を表示するset ruler
" ステータスラインに現在のgitブランチを表示するif neobundle#is_installed('vim-fugitive')set statusline+=%{fugitive#statusline()}endif"----------------------------------------------------------" デフォルトのファイラー"----------------------------------------------------------" デフォルトをVimfilerにする。:e .でvimfilerが開けるようになる。letg:vimfiler_as_default_explorer=1"----------------------------------------------------------" キーマッピング(ノーマルモード)"----------------------------------------------------------" ウィンドウを下に移動
nnoremap sj <C-w>j" ウィンドウを上に移動
nnoremap sk <C-w>k" ウィンドウを右に移動
nnoremap sl<C-w>l" ウィンドウを左に移動
nnoremap sh<C-w>h" ウィンドウを水平分割(Hyperのキーマッピングに合わせる)
nnoremap se:<C-u>sp<CR>" ウィンドウを垂直分割(Hyperのキーマッピングに合わせる)
nnoremap sd :<C-u>vs<CR>" 選択しているバッファ以外を閉じる
nnoremap <silent><Space>o:only<CR>" GIt 過去の変更を辿る
nnoremap <silent><Space>gb :Gblame<CR>" Git 差分を表示する
nnoremap <silent><Space>gd :Gdiff<CR>" Git ステータス画面を開く
nnoremap <silent><Space>gs :Gstatus<CR>"----------------------------------------------------------" 自動コマンド"----------------------------------------------------------" :Unite bookmark後にEnter押下でそのディレクトリをVimfilerで開く
autocmd FileType vimfiler call unite#custom_default_action('directory','cd')"----------------------------------------------------------" ctagsのtagsファイル読み込み"----------------------------------------------------------settags=./.tags;

tmux(編集途中)

VSCodeっぽい操作(編集途中)

必須のやつ(編集途中)

  • ターミナル操作
    • ウィンドウ
      • ウィンドウ間移動
      • ウィンドウ分割
    • タブ
      • タブ間移動
      • タブ分割
  • ファイル操作
    • ディレクトリ移動
    • 全文検索
    • ファイル名検索
    • 関数ジャンプ
  • Git操作
    • コミット履歴から差分を見たい
    • コミット一覧からファイルを選んで差分を見たい

あると便利なやつ(編集途中)

改善ポイント(編集途中)

気づいたら追記していきます。

  • ideコマンドみたいな独自コマンドでカスタムレイアウトの展開
  • 複数画面のcdディレクトリ同時移動

【vim】エディタエラーの対処法(スワップファイルの重複。E325: 注意)

$
0
0

vimエディタエラーの対処法(E325: 注意)

スワップファイルが見つかりましたのエラーが発生したときの対処法。

目次

  1. エラーの内容
  2. エラー発生原因
  3. 対処法
    1. ①大本のファイルで編集する
    2. ②編集したいswapファイルを選択する
  4. swapファイルの一括削除

エラーの内容

・E325: 注意
・次の名前でスワップファイルを見つけました "ファイルのパス.sw●"
  
image.png

■スワップファイルとは

  • vimエディターで編集を開始すると、自動生成されるファイル。
  • 拡張子.sw●
    • ●にはアルファベットが入る
    • 同じファイルで複数回強制編集を続けると、k,l,m,n・・・・のように連番でファイルが作成されてい
  • 保存してから終了するとスワップファイルは消える
    • コマンド「:wq」


発生原因

・編集内容を保存せず強制終了した場合に発生する。
・別のエディタで既に立ち上げている時に発生する。


対処法

①大本のファイルで編集する

エラーが出ているswapファイルを削除する

  1. エラー画面でファイルのディレクトリをコピー

image.png

2.Enter + qをクリックし、ターミナルに戻る
3.rm ファイルパスでswapファイルを削除
└ 例:「rm ~/desktop/.test.html.swp」
4.再度vimエディタを立ち上げる


②編集したいswapファイルを選択する

  1. Enter + Enter + Rをクリックする

・enter2回で下記のような入力モードになる。
・この状態で「r」を入力。
image.png

2.開いているファイルに対応するswapファイルの一覧が表示される。

image.png

3. 一番下まで移動すると、「使用するスワップファイルの番号を入力してください(0 で終了):」が表示される。
image.png

4.編集を開始したい番号を入力し、「」と表示されるまで、Enterを複数回クリック
image.png

5.コマンドモードで名前を付けて保存
:w ファイル名
 └例::w ~/desktop/test-v2.html
 └ enterで確定
 └ 既にファイルが存在する場合はエラー
└ 「w! ファイル名」:強制上書き
image.png


swapファイルの一括削除

find . -name '.*.sw*'|xargs rm
 └ findコマンドと正規表現でスワップファイルに該当するものを検出
 └ 該当ファイルに対しrmコマンドで削除実行

▼コマンドA |xargs コマンドB
コマンドAの実行結果を引数にして、コマンドBを実行。

PHP Intelephense の有償版を Neovim で使ってみる

$
0
0

PHP Intelephenseは PHP の Language Server の一つ。
VS Code での利用例は

など様々見られる一方、 Neovim での利用に関する情報があまり見つからなかったので、導入手順をメモ。
また有償版だとクラスやメソッドの実装へのジャンプやリネームなどの機能も利用できるようになるとのことで、せっかくなので有償版を購入して使ってみた。

有償版のライセンスキー取得

ライセンス購入ページから必要な情報を入力して購入する(記事投稿時点で ¥1,000 )。
後から送付されるメールにライセンスキーが記載されている。

Neovim 側の設定

language server のプラグインは coc.nvimを使用した。
coc.nvim の PHP 拡張である coc-phplsを使えばライセンスキーを coc-settings.jsonに記載するだけで特にその他の設定なしで利用できる。
ちなみにキーに含まれる licenceのスペルは licenseではないので注意( Intelephense の開発元はオーストラリアらしいが、アメリカ英語と異なる?)。

coc-settings.json
{"intelephense.licenceKey":"your licence key",}

後は :CocInstall phplsで拡張機能を追加すればオーケー。

課題

前述した実装へのジャンプやリネームもきちんと動作したので、 PHP の language server としてはこれがベストかもしれない。
ただインターフェースへのジャンプが上手くできなかったりするので、まだ諸々の設定を調べる余地がありそう...。

WSLのVimでインサートモードから抜けるときに自動で日本語入力をOFFにする(イベント駆動)

$
0
0

AlacrittyでWSLを使っているけど、もう少し使い勝手をよくする(とくにVim)ための備忘録。

InsertLeave 駆動時に zenhan を外部実行

@notoyaさんの記事 クリップボードの連携を参考にVimの自動コマンドで定義してみた。
インサートモードから離れるとき(InsertLeave)にIMEを切り替えするプログラム zenhan.exeを外部実行する。これをvimrcに書く。

augroup Norml

  autocmd!

  autocmd InsertLeave * :call system('/mnt/c/apps/zenhan/bin64/zenhan.exe {im}')

augroup END

参考にした情報

大変参考になりました!ありがとうございます!😉

vimの便利な矩形選択について

$
0
0

最近知って便利だと思ったので備忘録で。
矩形選択ってvscodeとかでしか使えないと思ってたんですが、Linux上でも使えました。

使用端末:mac

使い方

こんな感じのファイルを用意して、vimで開いてます。

image.png

control + vを入力します。
入力すると、左下に-- VISUAL BLOCK --という文字が出てきます。これで矩形選択できます。

image.png

この状態で移動すると薄い色で選択されます。

image.png

xを入力すれば、選択した分をまとめて削除出来ます。(実行すると、矩形選択モードは解除されます。)

image.png

一括で文字を入力する場合は、control + vVISUAL BLOCKを出してから対象の箇所を選択してshift + iでInsertモードにします。(パッと見は一つしか選択されてないように見えますが大丈夫です)

image.png

文字を入力します。(パッと見は一つしか以下略)
入力が終わったらescapeキーを押します。

image.png

Insertモードを解除すると選択した部分に文字が入力されます。

image.png

終わりに

何回か教えてもらったんですが、イマイチ覚えてられないのでまとめてみました。

Vim: 拡張子ごとにインデントを変更する方法 ~ 0から始めるvim編 ~

$
0
0

Vim: 拡張子ごとにインデントを変更する方法

だいぶvimも使い慣れてきたのですが,
インデントが全て同じになってしまっていて
不便だったので拡張子ごとに設定してみたというお話です。

ファイルタイプの確認

今回は拡張子 .jsを対象に紹介します。
1. hoge.jsというファイルをvimで開きます。
2. exモード(:wq の時に使う ':' で入るモード)で以下を入力

:echo &filetype

1__Thanks_for_flying_Vim__tmux_.png

echoで出力されるのが, filetypeになります。
hoge.png

今回はこのファイルタイプを使っていきます。

導入

それぞれの設定は以下のようになります。
if has('autocmd') を使っているのは,
古いバージョンでautocmdが存在しなかった時のために入れてあります。

.vimrc
""""""""""""""""""""""""""      インデント""""""""""""""""""""""""set autoindent          "改行時に前の行のインデントを計測
set smartindent         "改行時に入力された行の末尾に合わせて次の行のインデントを増減する 
set cindent             "Cプログラムファイルの自動インデントを始める
set smarttab            "新しい行を作った時に高度な自動インデントを行う
set expandtab           "タブ入力を複数の空白に置き換える 

set tabstop=2           "タブを含むファイルを開いた際,タブを何文字の空白に変換するか
set shiftwidth=2        "自動インデントで入る空白数
set softtabstop=0       "キーボードから入るタブの数

if has("autocmd")"ファイルタイプの検索を有効にするfiletype plugin on"ファイルタイプに合わせたインデントを利用filetype indent on"sw=softtabstop, sts=shiftwidth, ts=tabstop, et=expandtabの略
  autocmd FileTypecsetlocalsw=4sts=4ts=4 et
  autocmd FileType html        setlocalsw=4sts=4ts=4 et
  autocmd FileTyperubysetlocalsw=2sts=2ts=2 et
  autocmd FileType js          setlocalsw=4sts=4ts=4 et
  autocmd FileType zsh         setlocalsw=4sts=4ts=4 et
  autocmd FileType python      setlocalsw=4sts=4ts=4 et
  autocmd FileType scala       setlocalsw=4sts=4ts=4 et
  autocmd FileType json        setlocalsw=4sts=4ts=4 et
  autocmd FileType html        setlocalsw=4sts=4ts=4 et
  autocmd FileType css         setlocalsw=4sts=4ts=4 et
  autocmd FileType scss        setlocalsw=4sts=4ts=4 et
  autocmd FileType sass        setlocalsw=4sts=4ts=4 et
  autocmd FileType javascript  setlocalsw=4sts=4ts=4 et
endif

上記に載せてる拡張子以外にもファイルタイプさえわかれば,
設定できますので他にも設定していこうと思います。

参考サイト

http://hatakazu.hatenablog.com/entry/2012/06/12/231756


Vim: インサートモードで行の途中からでも次の行に新規挿入する方法 ~ 0から始めるvim ~

$
0
0

Vim: インサートモードで行の途中からでも次の行に新規挿入する方法 ~ 0から始めるvim ~

SublimeTextやAtomのCommand+Enterが便利だったので,
Vimのインサートモードでもやってみたというお話です。

デフォルトだと次のようなコマンドがあります。

インサートモード
<C-o>o

ただ毎回プリフィックスキーを打つのが面倒だったので,
次のようにキーバインドを変更したら快適でした。

.vimrc
inoremap <C-o> <C-o>o

左側の<C-o>の部分は自由に変更することができます。
私はいつも Ctrl+o でやっていたので,このような設定にしてみました。

注意

インサートモードのプリフィックスキー<C-o>には一度だけノーマルモードのコマンドを入力できる
という意味もあるので,もしいつも他の操作でプリフィックスキーをいつも使用しているのであれば,
他のキーに変更するかそのまま使用することをお勧めします。

vim: dein.vim 導入方法 ~ 0から始めるvim ~

$
0
0

vim: dein.vim 導入方法 ~ 0から始めるvim ~

以前までNeoBundleを使用していたのですが、開発中止になったそうです。
dein.vimを推奨していたので、これを期に dein.vimに切り替えましょう

Note: Active developement on NeoBundle has stopped. The only future changes will be bug fixes.

Please see Dein.vim -- A faster, well-tested plugin manager for Vim and Neovim. It can do everything NeoBundle does, including asynchronous installs.

dein.vimインストール

install script 実行

sh
mkdir -p ~/.cache/dein
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
# For example, we just use `~/.cache/dein` as installation directory
sh ./installer.sh ~/.cache/dein

以下を$HOME/.vimrc に貼り付けてください

.vimrc
"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('~/.cache/dein')
  call dein#begin('~/.cache/dein')

  " Let dein manage dein
  " Required:
  call dein#add('~/.cache/dein/repos/github.com/Shougo/dein.vim')


  " Add or remove your plugins here like this:
  call dein#add('Shougo/neosnippet.vim')
  call dein#add('Shougo/neosnippet-snippets')
  call dein#add('Shougo/deoplete.nvim')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif

"End dein Scripts-------------------------

これでインストール完了になります

【Linux】zipファイルの圧縮, 解凍

$
0
0

下記コマンドのxxxの部分をファイル名にする

zipファイルに圧縮するコマンド

zip -r xxxx.zip directory

zipファイルの解凍コマンド

unzip xxx.zip

eskk.vimで句読点をピリオドとコンマ(カンマ)にする.ついでにsticky shiftで楽に入力

$
0
0

eskk.vimで句読点をピリオドとコンマ(カンマ)にする.ついでにsticky shiftで楽に入力

久しぶりの記事.
ニッチな分野の記事を書くことが多いが,中々ネタもないし.

eskk.vimというのはskkという入力方式をvimで使うためのプラグインだ.
skkに一度慣れると中々元には戻れない.

Plug 'tyuru/eskk.vim'

skkで小指が疲れると思っている人.
是非ともsticky shiftで検索して,shiftキーを別のキーに移すと幸せになれるだろう.
私の場合は;にshiftを割り当てている.
今回はこの設定についても説明しておこう.

ところで,論文を書いていると、句読点は全角の、。ではなく,.を使うことであろう.
この時,通常のeskkだとそのまま、。と入力されてしまう.

そこで句読点をコンマとピリオドに自動で変えたいのだが,その設定方法はドキュメントを見れば分かるのだが,
gogleとかで検索するとちょっと嵌まるかもしれない.

句読点をコンマとピリオドにする方法

私の場合は半角+スペースが気に食わないので,全角カンマ・ピリオドを使っている

結論

autocmd User eskk-initialize-pre call s:eskk_initial_pre()
function! s:eskk_initial_pre()
let t = eskk#table#new('rom_to_hira*', 'rom_to_hira')
call t.add_map(',', ',')
call t.add_map('.', '.')
call eskk#register_mode_table('hira', t)
let t = eskk#table#new('rom_to_kata*', 'rom_to_kata')
call t.add_map(',', ',')
call t.add_map('.', '.')
call eskk#register_mode_table('kata', t)
endfunction

基本は以下のサイトを参考にすればよいが,これだけだと設定できない.
そう,一行目のautocmd ...が抜けているのだ.
vim scriptを読める人であれば分かるであろうが私は分からずはまった.

Vimで文章を書くときに便利なプラグイン

そこで:help eskk-initialize-preでヘルプを見るとちゃんと書いてあった.
以下にhelpの記載を抜粋する.

eskk-initialize-pre             *eskk-initialize-pre*
-------------------

このフックは最初にeskkが有効化される前に一度だけ実行される。
毎回有効化された時点で行いたい場合は|eskk-enable-pre|フックを参照。

アルファベットテーブルの登録          *eskk-alphabet-table*
----------------------------

|eskk-initialize-pre|フックを利用して次のようにアルファベット変換テーブルを
定義することができる。
>
    autocmd User eskk-initialize-pre call s:eskk_initial_pre()
    function! s:eskk_initial_pre()
      " ユーザはここで何か重たい初期化処理を実行することができる。
      let t = eskk#table#new('rom_to_hira*', 'rom_to_hira')
      call t.add_map('~', '~')
      call t.add_map('zc', '©')
      call t.add_map('zr', '®')
      call t.add_map('tm', '™')
      call t.add_map('z ', ' ')
      " "1." のように数字の後のドットはそのまま入力
      for n in range(10)
        call t.add_map(n . '.', n . '.')
      endfor
      call eskk#register_mode_table('hira', t)
    endfunction

    " http://subtech.g.hatena.ne.jp/motemen/20110527/1306485690
    " のeskkでの設定例。
    " この方法は g:eskk#rom_input_style が"skk"でないと
    " 最後のzが残ってしまうことに注意。
    autocmd User eskk-initialize-pre call s:eskk_initial_pre()
    function! s:eskk_initial_pre()
      for [orgtable, mode] in [['rom_to_hira', 'hira'], ['rom_to_kata', 'kata']]
        let t = eskk#table#new(orgtable.'*', orgtable)
        call t.add_map('zw', 'w', 'z')
        call eskk#register_mode_table(mode, t)
      endfor
    endfunction

細かな話

上のコードが何をしているのかについて説明する.
eskkでは日本語を入力するためにそのままのキーボードの入力から,
日本語(ひらがな)に対応するキーマップを持っている.
それが,eskk#table#new('rom_to_hira*', 'rom_to_hira')だ.

この#は実際にはパスの区切りになっている.
だから,eskk.vimをインストールした場所を見てみると,これがある.
私の場合はvim-plugを使っているので,こんな感じだった.

~/.vim/plugged/eskk.vim/autoload/eskk/table/rom_to_hira.vim

この中身は長いので全ては載せないが,抜粋すると,

function! eskk#table#rom_to_hira#load() abort
  return {
        \   'a': ['あ', ''],
        ...
            中略
        ...
        \   '[': ['「', ''],
        \   ']': ['」', ''],
        \   '.': ['。', ''],
        \   ',': ['、', ''],
        \}
endfunction

まさにこの一番最後の二行が問題だ.
つまり,上のコードはこのテーブルを上書きしているのだ.

まあ,分かってしまえば何ということはない.
が,実装方法を知らないとeskk_initial_preで設定できる,
それはeskk_initialize_preで自動で呼び出されるようになっているなどなど,
内部の実装を知らないと気付かないよ-.というお話でした.

sticky shiftについて

eskkは素のままだとshiftを押して入力することで区切りを指定する.
でもゴリゴリ書いているとemacs症候群には比にならないレベルで小指がやられる.
左右のshiftを使い分けていてもだ!

skk特有の問題といえるが,大概のIMEにはこれを回避するための手段が用意されている.
これがsticky shiftだ.

このsticky shiftという名前について

本来sticky shiftという名前を聞くと,shiftキーを押すと,次のキー入力が大文字に変換される.
つまり,shiftキーを押したまま大文字にしたいキーを押さなくてもよくする機能だ.
shift + aではなくshift -> aでaを大文字入力できる機能だ.

でも通常sticky shiftという言葉が使われる場合には,この機能だけでなく,
shiftキー自体も別のキーに割り当てることを意味しているようだ.

vimでの実現方法

eskk自体にこのsticky shiftをサポートする機能はない.
したがって別のプラグインで代用する.

私が使っているのは以下のプラグインだ.

Plug 'lambdalisue/pinkyless.vim'`

小指奮闘記 (Vimmer の Vimmer による Vimmer のためのキーマッピング

このプラグインではデフォルトで;がshiftに割り当てられる.
Plugを入れるだけで何も設定しなくてもよいので楽だ.

こちらは日本語だけでなく,素の入力でも;がshiftに割り当てられてしまうため,
C言語使いやbash使いは;が入力し辛くなるので嫌かもしれない.
'''''''''''''''''''''''''''''''''''

vim: dein.vim で ディレクトリツリーを表示させる方法 ~ 0から始めるvim ~

$
0
0

vim: dein.vim で ディレクトリツリーを表示させる方法

まだインストールされていない方はこちらを参考にしてみてください。
dein.vimインストール方法

インストール

1行追加すれば, インストールされるようになります。

.vimrc
call dein#begin(expand(プラグインの元のディレクトリパス))

#省略
+ call dein#add('scrooloose/nerdtree')

call dein#end()

if dein#check_install()
  call dein#install()
endif

デフォルトでツリー表示

デフォルトだとvimでファイルを開いたときにツリーが表示されないので,

次のコードを記述してあげると, 開いたときにツリーが表示されるようになります。

.vimrc
+ autocmd VimEnter * execute 'NERDTree'

上記は何をやっているかというと,
autocmd: 指定したイベントが発生したときに自動的に実行するコマンドを指定するコマンドです。
VimEnter: vimの全ての起動処理が終わった後に発生するイベントです。
* の部分: パターン ※今回は全ファイルに適用させる為*を使っています。 他) .txt (txtファイルのみに適用)
execute 'NERDTree' : NERDTree コマンドを実行

イベント一覧はこちらを参考にさせていただきました。

このような感じになります。
スクリーンショット 2016-07-19 11.35.19.png

emacs と vim の lsp をdocker で試す

$
0
0

はじめに

language server(以下 lsp)の登場でどのエディタでも、統合環境のような高機能エディタとなることが可能になりました。
みんな大好き emacs や vim でも lsp をサポートし、言語ごとの設定が大分楽になり敷居が下がってきたんじゃないかなって思います。しかし、如何せん試してみるのも面倒だなーって思う人は結構いるはずです。試してみる気力があったらとっくに入門してますしね...。
そこで、今回は emacs と vim の lsp 設定が内包した docker を使ってみて最新エディタ気分を味わっていきたいと思います。

emacs + lsp on docker

まず、emacs + lsp です。最近は spacemacs が流行っていますが今回は普通の emacs でやっていきます。最初に、以下のコードで emacs + lsp on docker のコードをローカルに落としてきます。

git clone https://github.com/emacs-lsp/lsp-docker.git

権限を与えて実行します。

cd lsp-docker
chmod u+x start-emacs.sh
./start-emacs.sh

立ち上がったら、パッケージのインストールを聞かれるのでyで進んで行きます。

スクリーンショット 2020-03-29 13.44.10.png

インストールが終わったら、C-x C-fProjectの適当な言語のファイルを開いて見ます(C-xは windows だと Ctr+x、mac だと ⌃+xです)。
スクリーンショット 2020-03-29 13.54.01.png

ファイルが開けたら、適当に色々試して見ながらコーディングすると楽しいと思います。
補完が効いているのとかがよく分かると思います。
スクリーンショット 2020-03-29 13.57.46.png

ただ、定義ホバーがオンになっているせいかdockerとの相性なのか、少し重いですね...。
詳しい挙動やできることなどは以下を見ていただけると助かります。
https://github.com/emacs-lsp/lsp-mode

vim + lsp on docker

次に vim + lsp です。こちらも流行りの neovim でなく普通の vim でやっていきます。今回も同じようにコードを落としてきます。今回は公式で用意されていなかったため自前で用意しました。

git clone https://github.com/komem3/vim-lsp-docker.git

Docker イメージをビルドします。

./build.sh

emacs + lsp のようなサンプルプロジェクトを用意するのが面倒だったため、引数にサンプルプロジェクトへのパスを指定して実行します。

vim-lsp-docker % PROJECT_DIR=~/Downloads/lsp-docker/demo-projects ./start.sh # PROJECT_DIR に lsp-docker/demo-projects へのパスを指定する

コンソールが開けたら、Project下の適当なファイルを vim コマンドで開いてみます。
(TypeScriptとC++はうまく動かせなかったので他の言語でおねがいします...)

vim Project/Javascript/hello-world.js 

こちらもファイルが開けたら適当にコーディングしてみると楽しいと思います。
vim の軽さをすごい感じます。
スクリーンショット 2020-03-30 19.29.40.png

詳しい挙動やできることなどは以下を見ていただけると助かります。
https://github.com/prabirshrestha/vim-lsp

終わりに

お手軽に emacs や vim の lsp を試せるので、興味がある人は試してみてほしいなって思います。
また、今回使った emacs や vim の設定ファイルはどちらもとても短い記述内容になっているので、軽く見てみると簡単に設定できるもんだなぁって思うと思います。

今回の設定はどちらも最低限のものになっていますが、emacs や vim の魅力は高い拡張性や自分好みの設定にし放題なことのため、まだまだ力を温存しています。しかも最近は spacemacs とか neovim とか出てて楽しい界隈だなぁ。

vimの設定とプラグインの入れ方。vim-plugを使ってシンプルに入れる。

$
0
0

はじめに

vimのプラグインを導入したり、vimrcを書き換えて自分好みのvimを設定したいと思い、色々調べつつ設定していったので、それをここに記録します。
ここではluaを必要とするプラグイン(neocompleteという補完機能のプラグイン)を使用します。
あらかじめluaの入ったvimを用意しておきましょう。

osはubuntu18.04です!
docker上で操作しています。

vim --version | grep lua

でluaが入っているかどうかが分かる。+luaと表示されたら入っている。

$apt install vim*

でインストールできる。*をつけるとluaが有効なvimをインストール出来た。

vimrcのコマンドの意味

vimrcとはvim起動時に一度だけ自動で読み込まれるファイル。ここに命令を記述することで、自分好みの設定をすることができる。しかし、コマンドの意味を理解していないと、思った通りに動いてくれなかったり、詳細な設定が難しいと思い、調べることにした。
ちなみにこのvimrcはホームディレクトリに置いておくことで自動的に読み込まれるみたいだ!!

autocmd

autocmdとはvimで指定したイベントが発生したときに実行するコマンドを指定するコマンドだい。

autocmd BufNewFile * put = ちーっす

上のようにすると、新しいファイルを作成したときに自動でちーっすが入力される。ここのBufNewFileにあたる部分をイベントと呼ぶ。イベントにたくさん種類があって:help{event}で調べることができる。

ただ、これだと問題が起きるらしい。vimrcの設定を書き換えても、前に書いていた設定が残っていて複数回同じコマンドを出してしまうのだとか。それを防ぐためにaugroupというコマンドがある。

augroup

autocmdをグループ化するコマンド。以下のように使う。

augroup sample
  autocmd!
  autocmd BufNewFile * put = 'ちーっす'
augroup END

noremap

キーマッピング設定をするコマンド。「このキーを押したらこのキーと同じ挙動をする」っていうような設定ができる。使い方は以下の通りである。

noremap <C-a> <Esc>$a

この場合はCntrl+aを押したときに、<Esc>$aと同じ挙動をするぜって意味。
ちなみに、これはノーマルモードのキーマッピング設定を行うためのコマンドで、インサートモードではinoremapを使うぜ!

autocmdの以前の設定を削除するためにautocmd!を実行したのちに、新たにautocmdを設定しますよっていうやつ。一連の操作をまとめてくれているんだね!

追加したい機能

自分のvimを設定するにあたり、追加したい機能は以下の通りだ。

  • htmlの閉じタグを自動補完
  • 見た目をよくしたい(カラースキーマの設定)
  • ファイルをツリー上に表示して移動しやすくしたい

htmlの閉じタグを自動補完

augroup MyXML
  autocmd!
  autocmd Filetype xml inoremap <buffer> </ </<C-x><C-o>
  autocmd Filetype html inoremap <buffer> </ </<C-x><C-o>
  autocmd Filetype eruby inoremap <buffer> </ </<C-x><C-o>
augroup END

プラグインを入れる。

プラグインを入れる前に、プラグイン管理ツールを導入しよう。
今回はシンプルなvim-plugを使用。
インストールも使い方も簡単。
以下のコマンドを実行しよう。

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

そして以下をvimrcに追記

call plug#begin()
Plug '入れたいプラグイン'
call plug#end()

要はcall plug#begin()call plug#end()の間に入れたいプラグインを記述していくだけでOK!簡単!

記述したらPlugInstallでインストールできるぞ!
消したいときはPlugCleanでプラグインを削除できるぞ!

追記

最近macに買い替えたため、macでのやり方も書いておく。
macではデフォルトでvimが入っている。しかし、このvimはluaが標準装備ではないのでluaを追加する必要がある!
しかしありがたいことに2020/03/31現在ではbrew install vimでインストールしたものにデフォルトでluaが入っているのだとか。やったー
なので普通にbrew install vimでインストールしよう!
しかし、ここで当たり前なのだがterminalでvimと打ち込むと既存のvimが起動する!
なので新しくインストールしたvimを起動するためにPATHを変更しよう!
新しくインストールされたvimは/usr/local/bin/vimに置かれるためここにPATHを通そう!
export PATH=$PATH:/usr/local/bin/vimで通せるよ。念のため以下のコマンドでluaが入ってるか確かめておこう。

$vim --version

+luaが確認できたらOKだ!
ちなみにこの記事ではneocompleteを使うためにluaを入れているが、neocomplete自体は開発終了するため、deopleteというプラグインを使う方がいいのだとか....。

参考

https://qiita.com/s_of_p/items/b61e4c3a0c7ee279848a
https://qiita.com/puriketu99/items/1c32d3f24cc2919203eb
https://qiita.com/kouichi_c/items/e19ccf94b8e5ab6ed18e
https://github.com/junegunn/vim-plug
.vueファイルを編集するときのVimの設定


vim: インサートモードで行頭や行末へ移動する方法 ~ 初心者 ~

$
0
0

vim: インサートモードで行頭や行末へ移動する方法 ~ 初心者 ~

前回紹介した Vim: インサートモードで行の途中からでも次の行に新規挿入する方法 ~ 初心者 ~で、
他にも色々と設定してみようと思ったのでその紹介を致します。

1.おさらい

インサートモードのプリフィックスキーには一度だけノーマルモードのコマンドを入力できるという意味があります。
これを使って今回も設定していきます。

2.基本コマンド

インサートモード
<C-o>^  "行頭へ移動
<C-o>$  "行末へ移動

3.キーバインドの変更

.vimrc
"行頭へ移動
inoremap <C-a> <C-o>^
"行末へ移動
inoremap <C-s> <C-o>$

今回は<C-a><C-s>にキーバインディングしてみました。

デフォルトだと は動作しないので,
もしを使いたいときは次の記事を参考にしてみてください

参考サイト
http://d.hatena.ne.jp/ksmemo/20110214/p1

VimをSQLクライアントにするプラグインdadbod/dadbod-uiを使ってみた

$
0
0

概要

VimでSQLを実行できるプラグイン。
※ まだ開発中とのことですが、今のところ不自由なく使えています。

MySQLのmysql dbに接続した画面
1.png

確認環境

  • Vim 8.2.350

設定

MySQLの場合

接続先の情報を.vimrcに記述。

.vimrc
let $DBUI_URL ='mysql://ユーザー名:パスワード@ホスト:ポート/DB名'" 例) let $DBUI_URL = 'mysql://user_name:password@localhost:3306/local_db'" DBが複数ある場合letg:dbs={\'local':'mysql://user_name:password@localhost:3306/local_db',\'staging':'mysql://user_name:password@localhost:3306/staging_db'\}

デフォルトでは一覧表示(List), インデックス一覧(Indexes), 主キー(Primary Keys), 外部キー一覧(Foreign Keys) がある。
それに別のものを追加したい場合、 g:db_ui_table_helpersで設定する。

.vimrc
letg:db_ui_table_helpers={\'mysql':{\'Desc':'DESC {table}',\'Create Table':'SHOW CREATE TABLE {table}',\'Comment':'SHOW FULL COLUMNS FROM {table}',\'Count':'SELECT COUNT(*) FROM {table}'\}\}

使い方

下記のコマンドで今開いている画面の左側にテーブル一覧が表示されます。

:DBUI

oでコマンドが選択され、右側にSQLが表示されます。
右側のSQLを編集して、保存すると編集したSQLが実行されます。

自分の使い慣れたキーバインド/プラグインでSQLが実行できるので、
すべてをVimで解決したい人には良いプラグインだと思います。

GitHubリポジトリ

Vim patchダイジェスト [2020/02]

$
0
0

Vimのリリースされたpatchの説明です。patchの内容を手作業で一つ一つ丁寧に確認して書いています。英語は忠実に訳していません。Vimを使っている人が理解しやすい表現にしています。
新機能、大幅な仕様変更には、:four_leaf_clover:が付いています。
また、個別には取り上げていませんが、Vim 9 scriptの実装と不具合修正も頻繁におこなわれています。
(8.2.01918.2.0336)

  • 8.2.0335: :four_leaf_clover::disassembleの引数がs:で始まる場合はスクリプトローカル関数を補完するようにしました。
  • 8.2.0320: :four_leaf_clover:Haikuのサポートを追加しました。
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.2.0299: :four_leaf_clover:test_unknown()test_void()を追加しました。
  • 8.2.0294: 関数名と同じ名前のExコマンドが認識できない件を修正しました。
  • 8.2.0286: 端末ポップアップウィンドウに対してpopup_close()が使用できない件を修正しました。
  • 8.2.0272: :four_leaf_clover::helptags ALL実行時に書き込み権限エラーを無視するようにしました。
  • 8.2.0271: :four_leaf_clover:num64フィーチャーを廃止しました。(常に有効)
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.2.0258: :four_leaf_clover:echoraw()を追加しました。指定された{expr}をそのまま出力します。modifyOtherKeysの有効/無効を切り替えたりするのに便利です。
  • 8.2.0257: :four_leaf_clover:win_gettype()を追加しました。ウィンドウのタイプ(ポップアップ/コマンドラインウィンドウ/通常)を返します。
  • 8.2.0250: 未使用のtest_clear_search_pat()を削除しました。(関連patch: 8.2.0212)
  • 8.2.0233: rand()内でgarbagecollect()を使用するとクラッシュする件を修正しました。(rand()srand()の実装を再設計しました)
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.2.0191: :four_leaf_clover:ポップアップウィンドウ内で端末を開けるようにしました。(:h popup-terminal) (関連patch: 8.2.0192, 8.2.0193, 8.2.0194)

凡例

表記意味
:four_leaf_clover:新機能、大幅な仕様変更
:alien:Vim開発者向けの追加、変更
'hoge'オプション (:h options参照)
:hogeExコマンド (:h :index参照)
hoge()組み込み関数 (:h functions参照)
v:hogeVim定義済変数 (:h v:参照)
+hogefeature (:h +feature-list参照)

方針

こちらを参照。

OSの状態を変更する(Vimを使ってSELinuxをOFFにする)

$
0
0

Linux(UNIX)における設定

LinuxをはじめとするUNIX系のOSでは設定の多くがテキストファイルで定義されています。
そのためOSやミドルウエア等の設定変更は各種設定ファイルを編集することで行うことになります。

設定ファイルの編集にはテキストエディタを利用することになるのですがLinuxの管理はターミナル経由で行われることが一般的であるためGUIベースのエディタは利用できません。そのためCUIベースのエディタの利用が必須となりますが、その最も代表的かつ標準的なものがVi(m)です。

vimは操作に癖があるエディタとして有名ですが、その操作はエンジニアには必須であるためこの機に習得しましょう。

なお、vi(m)の使い方の詳細については、こちらの外部コンテンツを参考にしてください。

vimは(設定すれば)Windowsでも利用できますので各自練習してみてください。

SELinuxを無効にしてみる

ここではSELinuxの設定をONからOFFに変える操作をしてみます。

編集ファイルを指定してvi(m)を起動。

管理者権限(sudo)で、ファイル(/etc/selinux/config)を指定してvimを起動します。

sudo vi /etc/selinux/config

ログインして最初にsudoコマンドを利用する際はパスワードを聞かれることがありますので入力します(ユーザーのパスワードです)。

スクリーンショット 2020-03-31 8.25.26.png

エディタが起動し、ファイルの内容が表示されます。
このときvimは[ノーマルモード]というモードで動作していてこのモードでは編集ができません。

スクリーンショット_2020-03-31_8_26_00.png

なお、文中に[SELINUX=enforcing]となっている個所があるかと思いますが、この記述によりSELinuxがONになっています。OFFにするにはこの記述を[SELINUX=disabled]にしていきます。

入力(挿入)モードに切り替える

文字を入力・編集するためには入力モードに切り替えます。切り替えるためには小文字に[i]を入力します。
すると下部に[INSERT]と表示され入力モードになったことがわかります。

スクリーンショット_2020-03-31_8_26_15.png

ESCボタンを押すことでノーマルモードに切り替わります(戻ります)。

編集して保存する

矢印ボタンでカーソルを移動させ、enforcingをdisabledに編集します。

スクリーンショット_2020-03-31_8_27_00.png

編集がわ終わったらESCキーを押し、コマンドモードに変更し:(コロン)を入力し、続いてwqと入力します。
:を入力することでコマンドモードに切り替わり、コマンドを受け入れる状態になるのでwq(w:書込み,q:終了)を入力しています。

これで編集が完了しました。

編集を破棄して終了する

編集の途中で内容を破棄したい場合があります。その際は、コマンドモードにて、:q!とすることで強制終了されます。

:q!

設定の反映と確認

OSのリブート

OSレベルでの設定を反映する場合、OSのリブートが必要となるためOSをリブートしてみます。

sudo shutdown -r now

sudo rebootでもいけるはず。

設定反映の確認(SELinuxがOFFになってるか確認)

リブート後再ログインしgetenforceコマンドを叩いてみます。

getenforce

Disabled

Disabledになっていたら正しく設定されているということです。

今日のスクリプト(gVim):ウィンドウの位置と幅(2)

$
0
0

Windowの位置と幅,高さを任意に変更します.

◆やりたいこと

Windowの位置と幅,高さを変更するスクリプト(前回アップしたのはこちら → 「今日のスクリプト: (Vim) Windowサイズと位置の調整」)の拡張です.

前のバージョンは決め打ちでした.
• SetLines()でフル行数か直前か
• SetWidth()で幅いっぱいか直前のトグル

これはこれでシンプルでいいです.
が,固定の位置,幅,高さに戻したいことがあります.

それで,それぞれの関数に引数をもたせました.
ただ,引数がない時のエラーがうざかったので,
「引数 に '0'を入れるとトグル」になるようにしました.

◆まずは高さ:SetLines(N) 関数

""" (Toggle)Set win lines Full <-> previous
"""
map <Leader>j :call SetLines()
map ,wj :call SetLines()
""
""" SetLines(N) -- N=0 --> Toggle, N: line num
function! SetLines(nlin)
if a:nlin == 0
if !exists("g:oline")
let g:oline = &lines
let &lines=999
else
let &lines = g:oline
unlet g:oline
endif
else
let &lines = a:nlin
endif
endfunction

◆幅: SetWidth(N) 関数

"
"""""" (Toggle)Set win width Full <-> previous
"
map <Leader>@ :call SetWidth(0)
map ,w@ :call SetWidth(0)
map ,wl :call SetWidth(0)
""
"""""" SetWidth(N) function. N=0 --> Toggle / N --> width number
"" command! -nargs=+ SetWidth call SetWidth()
function! SetWidth(nwide)
if a:nwide == 0
if !exists("g:owide")
let g:owide = &columns
let &columns=999
else
let &columns = g:owide
unlet g:owide
endif
else
let &columns = a:nwide
endif
endfunction

◆3つの関数をcall → ひとつのキーバインドに割付け: ",w1"

""
"" Set winpos to Initial pos
""
""  初期値を入れておく.
let iniposx = 160
let iniposy = 20
let iniwide = 90
let inilines = 35
map <Leader>1 :call SetWinpos(iniposx,iniposy)
map ,w1 :call SetWinpos(iniposx,iniposy):call SetWidth(iniwide):call SetLines(inilines)
""
"" iniposx.... はunletしたほうが行儀が良い?そんなことしらん.
""

◆ポジション関数は変更なし: SetWinpos(x,y)

""
"" set winpos to 2nd Display
let newposx = -1180
let newposy = -980
map <Leader>w :call SetWinpos(newposx, newposy)
map ,ww :call SetWinpos(newposx, newposy)
""
"""""" (Toggle)Set win Position to x,y <-> previous
command! -nargs=+ SetWinpos call SetWinpos()
function! SetWinpos(posx, posy)
if !exists("g:oposx")
let g:oposx = getwinposx()
let g:oposy = getwinposy()
echo "winpos "a:posx . " " . a:posy
execute "winpos " a:posx . " " . a:posy
else
echo "winpos "g:oposx . "\  " . g:oposy
execute "winpos " g:oposx . " " . g:oposy
unlet g:oposx g:oposy
endif
endfunction

スクリプトは以上です.

◆呼び出し方をまとめると,

  • 全幅トグル: ,wl
  • 全高トグル: ,wj
  • 別ポジション: ,ww
  • 初期ポジション: ,w1

ま,キーバインドはご自由に.

Viewing all 5722 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>