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

PythonでGoogle画像検索をして画像をフォルダに保存する

$
0
0

こんにちは。

Pythonを使ってGoogle画像検索にアクセスして画像を取得してみました。
適当に書いて動かしているのでガバガバです。

最初に

まあ適当にデスクトップに image的なファイルを作成してターミナルを開きましょう。

cd desktop/image

して

vim image.py

とでもしてプロジェクトを作成してください。
エディタがvimなのは僕の趣味です。

言い忘れていましたが、これにはPython3と多少のモジュールが必要になるのでインストールしてください。

pip3 install モジュール名

すればインストールできるのでモジュールエラーがでたらやってみてください。

てことでコード書きます。

写経するなりコピペするなりしてください。

image.py
importrequestsimportrandomimportshutilimportbs4importsslssl._create_default_https_context=ssl._create_unverified_context

ここまででモジュール関連は終わりです。
あ、sslは証明が正しくないサイトをスクレイピングしたりするのに(それ以外でも)使えるので覚えておきましょう。

image.py
defimage(data):Res=requests.get("https://www.google.com/search?hl=jp&q="+data+"&btnG=Google+Search&tbs=0&safe=off&tbm=isch")Html=Res.textSoup=bs4.BeautifulSoup(Html,'lxml')links=Soup.find_all("img")link=random.choice(links).get("src")returnlinkdefdownload_img(url,file_name):r=requests.get(url,stream=True)ifr.status_code==200:withopen(file_name+".png",'wb')asf:r.raw.decode_content=Trueshutil.copyfileobj(r.raw,f)defcode():code=""foriinrange(10):code+=random.choice("aaaaaaaaaaaa")returncodewhileTrue:num=input("検索回数:")data=input("検索ワード:")for_inrange(int(num)):link=image(data)download_img(link,code())print("OK")

続いて image,download_img,codeという関数を宣言して中身を書いていきましょう。
まあ簡単に言えばスクレイピングして取得したデータをフォルダ内にaaaaaaという名前で保存しているだけです。
なので

code += random.choice("aaaaaaaaaaaa")

のaaaaaaaの名前はなんでもOKということですね。
そのあとのwhile Trueの場所ではアクセスが成功した先でワードを指定したりしているだけなのでそんなに難しくないです。
最後のPrint("OK")なんかも自分好みに変更しても楽しいかもしれませんね。

一応「全部コピペさせろよ!!!」って人のために全体を置いておきます。

image.py
importrequestsimportrandomimportshutilimportbs4importsslssl._create_default_https_context=ssl._create_unverified_contextdefimage(data):Res=requests.get("https://www.google.com/search?hl=jp&q="+data+"&btnG=Google+Search&tbs=0&safe=off&tbm=isch")Html=Res.textSoup=bs4.BeautifulSoup(Html,'lxml')links=Soup.find_all("img")link=random.choice(links).get("src")returnlinkdefdownload_img(url,file_name):r=requests.get(url,stream=True)ifr.status_code==200:withopen(file_name+".png",'wb')asf:r.raw.decode_content=Trueshutil.copyfileobj(r.raw,f)defcode():code=""foriinrange(10):code+=random.choice("aaaaaaaaaaaa")returncodewhileTrue:num=input("検索回数:")data=input("検索ワード:")for_inrange(int(num)):link=image(data)download_img(link,code())print("OK")

ここまでできたらターミナルを開いて
python3 image.pyをします。

モジュールエラーがでたら最初に戻ってインストールしなおしてください。
このレベルのPythonのエラーは大抵ググれば解決するのでがんばってください。

エラーもなく動作すれば

検索回数:

を指定すれば

検索ワード:

となって成功すればOKとでてきて最初に作成した iamgeファイルの中にaaaaaaaa.png的な名前でワードにそった画像が保存されているはずです。

保存されていればおしまいです。お疲れ様でした。


Termux上でvimをコンパイルしたかった

$
0
0

お気持ちの経緯

Termuxはandroid系で動く仮想LinuxCUI環境みたいなもの、どんな中身をしているかは未だによくわからん。
「Androidでvim動かせる幸せ~」みたいな空気吸って生きてるけどtermuxで配ってるvimはluaやrubyがコンパイルされていないからふと欲しいと思ったプラグインが動かなかったりする。
そこでtermux上でvimのコンパイルをしてみたい。書きながら試しているので出来なかったらお蔵入りします。

つまり何をするのか

termux上でvim --version | grep rubyと叩いたときに

+cscope            +localmap          -ruby              +wildmenu

って表示される人のうち、-ruby+rubyに直したい人。

vimのソースコードをインストール

まずはここから。
svnとかwgetとかでソースコードをインストールできるがこの場合vimのバージョンを指定しないといけない。そういうのはめんどくさい。
gitコマンドでインストールすると自動で最新のバージョン(今日の時点だと8.1)を入れてくれるのでそれに頼る。古いバージョンでやりたいという人は他のコマンドでやればいいと思う。

$cd .vim
$git clone https://github.com/vim/vim.git

./configureする

インストールされたファイル群にconfigureという名前の実行ファイルがある。これに好きな引数を渡してやると渡した引数に関連する言語がvimにコンパイルされる(らしい)。

$./configure --with-features=huge --enbale-multibyte --enable-rubyinterp

これが終わったらmakeをコマンド、その後make installを実行するとうまく行くらしい。簡単ですね

$make
$make install

うまくいかない

なんで

clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
link.sh: Linking failed
make[1]: *** [Makefile:2084: vim] Error 1
make[1]: Leaving directory '/data/data/com.termux/files/home/.vim/vim/src'
make: *** [Makefile:29: first] Error 2

まったくわからん.記事を読み漁るとruby-develが必要みたいなことが書いてあったので入れてみる.

ruby-develなんてないぞ!!!!!!どうなってんだ!!!!!!!

termux上でapt-get install ruby-develを叩くと

$ apt-get install ruby-devel
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package ruby-devel

って言われる.「ruby-devだよ~」っていう記事を見かけたのでそっちを打ち直すと

$ apt-get install ruby-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package ruby-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  ruby

E: Package 'ruby-dev' has no installation candidate

とのこと.termux上だとruby-develがパッケージとして存在しないのかな?詰んだ.

試しに他の言語で試してみる,perlみたいな

やっぱり信頼できるのはperlですよ.なので同じことをperlでもやってみる.
./configure --features=huge --enable-multibyte --enable-perlinterpを叩いてみる.これがまた時間がかかる.
なんかスムーズにいったのでmakemake installを叩いてみる.

結果

$ make install
Starting make in the src directory.
If there are problems, cd to the src directory and run make there
cd src && make install
make[1]: Entering directory '/data/data/com.termux/files/home/.vim/vim/src'
/bin/sh install-sh -c -d /usr/local
mkdir: can't create directory '/usr/': Read-only file system
mkdir: can't create directory '/usr/': Read-only file system
make[1]: *** [Makefile:2668: /usr/local] Error 1
make[1]: Leaving directory '/data/data/com.termux/files/home/.vim/vim/src'
make: *** [Makefile:39: install] Error 2

???????????????????????????????????????????????????????????????
指示通り./srcに入ってからもう一回makeを叩いてみる

$ pwd
/data/data/com.termux/files/home/.vim/vim/src
$ make
$ make install
/bin/sh install-sh -c -d /usr/local
mkdir: can't create directory '/usr/': Read-only file system
mkdir: can't create directory '/usr/': Read-only file system
make: *** [Makefile:2668: /usr/local] Error 1

?????????????????????????????????????????????????????????????????????????????????????????????????????????????
'/usr/'って/data/data/com/termux/files/usrのこと??????????そこ755にしてもできないんですけど??????

termux一生分からん

Vim(NeoVim)でSwift -プラグイン, LSPの導入まで-

$
0
0

こんにちは
みなさん, Vim(NeoVim)やってらっしゃいますでしょうか.

私は最近になってようやくvimを真面目に触り始めました.
普段(?)swiftを書いているのですが,vimでもXcodeばりに補完やハイライトができると嬉しいなと思い,設定してみました.
deopleteを使った記事はあったのですが,coc.nvimを使ったものはなさそうなので,記事にしました.

環境

  • OS: macOS Mojave 10.14.6
  • NeoVim: NVIM v0.4.2, Build type: Release, LuaJIT 2.0.5
  • Swift: Apple Swift version 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7)
  • Xcode: Version 11.0 (11A420a)

プラグインマネージャはvim-plugを使っています.
シンプルで使いやすいです.
vim-plugの導入方法はググるとすぐ出てくるので割愛します.

シンタックスハイライト

swiftはデフォルトではハイライトされないため,構文ファイルを作る,またはプラグインを導入する必要があります.
今回は以下のプラグインを使います.

keith/swift.vim

インストール

init.vimに以下を記述します.

init.vim
call plug#begin('~/.vim/plugged'):" 👇これを記述
Plug 'keith/swift.vim':call plug#end()

セーブしてneovimを起動, :PlugInstallでインストールされます.
これでシンタックスハイライトが効くようになりました.

補完

vimで補完機能を有効にするに当たって,いくつか選択肢があります.

  • deoplete
  • coc.nvim
  • vim-lsp

精査はしていないですが,coc.nvimがスター数も多く,設定も直感的であったため,coc.nvimを使うことにしました.
coc.nvim

deopleteはよくわかりませんが,coc.nvimとvim-lspはLanguage-Server-Clientという点で,補完のアプローチはほとんど同じだと思います.

coc.nvimはtypescriptで実装されており,vim-lspはvimscriptで実装されています.
vimだけで完結させたい方はvim-lspの方が良いかもしれません.

coc.nvimのインストール

init.vimに以下を記述します.

init.vim
call plug#begin('~/.vim/plugged'):" 👇これを記述
Plug 'neoclide/coc.nvim',{'branch':'release'}

Plug 'keith/swift.vim':call plug#end()

セーブしてneovimを起動, :PlugInstallでインストールされます.

インストール後は:Coc*系のコマンドが使えるようになります.
:CocConfigでcocの設定ファイルを開き,そこに設定を書いていくといった流れになります.

Language-Server-Protocolの導入

coc.nvimはlanguage-server-clientであるため,単体では意味をなさず,言語ごとのlanguage-server-protocol(以下LSP)を動かす必要があります.
swiftのLSPとしてSourceKit-LSPがあるのでそれを利用します.

sourcekit-lspのインストール

ソースからbuildします.(Swift5.1以上が必要)

適当なディレクトリでhttps://github.com/apple/sourcekit-lsp.gitをcloneします.
その後sourcekit-lspに移動し,buildします.
実行ファイルのあるディレクトリに移動し,./sourcekit-lspを実行してエラーが起きなければインストール完了です.
sourcekit-lspの実行ファイルをpathが通っているディレクトリに置いておく方が良いかもしれません.

以下は実行するコマンドです.

$ git clone https://github.com/apple/sourcekit-lsp.git
$ cd sourcekit-lsp
$ swift build -c release 👈 そこそこ時間がかかります
$ mv .build/release/sourcekit-lsp /usr/local/bin 👈 やらなくてもヨシ

cocの設定

neovimを起動します.
:CocConfigでcocの設定ファイルを開き以下を記述します.

coc-settings.json
{"suggest.enablePreselect":true,"languageserver":{"swift":{"command":"<sourcekit-lspの絶対パス>","filetypes":["swift"]}}}

お疲れ様でした!
これでswiftの補完が効くようになりました👍

また,他の言語でもLSPを用意すれば補完やコードジャンプなどができるようになります.
LSPの例として

  • ruby: solargraph
  • python: pyls

などがあります.

閑話

設定したのはいいものの,果たしてVimでSwiftを書くタイミングはくるのか?
iOSアプリ開発であればXcode一択なのでは...

References

vscodeでswift5.1のSourceKit-LSPを動かす

PythonでYahoo!ニュースのタイトルと配信日時を取得する

$
0
0

こんにちは

ふと
cd desktop/python
をして
ls
したところ、3分クッキング的にできるスクレイピングがあったので記事にしようと思います。

最初に

「ではこちらが環境設定のできているPCになります〜〜」なんてアシスタントの人が持ってきてくれるわけでもないので環境設定からやりましょう。

ちなみに僕の環境はmacOS Catalina10.15です、不具合だらけで最近よくいろんなアプリが落ちます。

あ、Python3は入ってる前提でお願いします。

今回用意するモジュールは
BeautifulSouprequestsです
どちらも入っていない人はpip3 install 〇〇でインストールしてください。
これでとりあえず材料が揃った感じです。
ここまでで3分経ってそうですね、頑張っていきましょう。

次に

ターミナルを開いてcd destkop(ここは自分が保存したい場所でいいです)をして保存先を決めましょう。オススメはデスクトップにPythonというファイルを作ることです。

そうしたらvim news.pyとしてPythonファイルを作ります。ここは趣味でvimを使っているだけなのでAtomとかVSCodeでOKです。

vimはいいぞ。

今回はYahoo newsからスクレイピングしてくるので
https://news.yahoo.co.jp/をurlとして使います。

スクリーンショット 2019-11-07 15.29.55.png
このアクセスランキングの場所を表示します、楽しくなってきましたね。

スクリーンショット 2019-11-07 15.39.34.png
この写真で選択されているyjnSub_listをスクレイピングします。
Chromeでデベロッパーツールを開いてのぞいてみて下さい。

コード

まずはモジュールをimportしないと話にならないのでチャチャッと入れます

news.py
importrequestsimportbs4

そしたらurlとかsoupとかにいい感じに代入してあげて関数作ってprintすれば完成です。
簡単ですね。

news.py
url='https://news.yahoo.co.jp'html=requests.get(url)soup=bs4.BeautifulSoup(html.text,'html.parser')lank=soup.find('ol',class_='yjnSub_list')urls=list(map(lambdal:l.find('a').get('href'),lank))defget_title(url):html=requests.get(url)soup=bs4.BeautifulSoup(html.text,'html.parser')returnsoup.find('div',class_='hd').texttitles=list(map(get_title,urls))print('title'.join(titles))

最後のprint('title')のtitleは適当に書き換えても大丈夫です。

コードがかけたらターミナルで
python3 news.pyと入力しましょう。
エラーもなくニュースと配信日時が取得できるはずです。

moduleエラーを吐かれてしまったら最初の環境設定に戻ってpip3 uninistall 〇〇とかして再度インストールしてみてください。

お疲れ様でした。

Vimコマンドの備忘録

$
0
0

環境

Ubuntu

最初に

知ってたけど深く触ってないシリーズ。
今の環境で頻繁に使うことになりそうなので備忘録として残します。
自分がよく使っているコマンドを載せています。
使うコマンドが増えてきたら更新しようと思います。

Vimをインストールする

Ubuntuになりますが、

$ sudo apt-get install vim

バージョン確認

dpkg -l vim

インサートモード 開始位置

コマンド詳細
aカーソルの右側から開始
iカーソルの位置から開始
A行末に移動し開始
l行頭に移動し開始
o現在の行の下に改行し開始
cc1行を削除して開始

ビジュアルモード

※編集中のテキストの範囲選択を視覚的に行うモード
コマンド詳細
vビジュアルモード開始
Ctrl + v矩形選択のビジュアルモード開始
Vカーソルのある行からビジュアルモード

その他の挙動

コマンド詳細
ESCコマンドモードに戻る
Ctrl + vコマンドモードに戻る

移動する

コマンド詳細
j下に移動
k上に移動
h左に移動
l右に移動
w, W次の単語の先頭に前進
Hウィンドウ内の一番上の行に移動
Mウィンドウ内の真ん中の行に移動
Lウィンドウ内の一番下の行に移動
ggページの先頭に移動
Gページの最後に移動

削除する

コマンド詳細
ddカーソルのある行を削除
diwカーソル上の単語を削除
di"ダブルクォーテーションの内部の文字を削除
ditHTMLタグ内部を削除
x1文字削除
Dカーソル位置から行末まで削除

コピペ、戻る進む

コマンド詳細
yy今いる行をコピー
pカーソル下に行をペースト
u戻る(Ctrl + zと一緒)
p進(Ctrl + yと一緒)

検索

コマンド詳細
*カーソル下の単語を検索
#カーソル下の単語を検索(上方向)
/"文字""文字"を検索する

Vim終了

コマンド詳細
sq閉じる
:q閉じる
:w保存
:q!強制終了

vimでdeleteキーが ^? になってしまった時の無理やりキーマップ法

macでaliasの登録

$
0
0

覚え書きです.

登録手順

  1. コマンドでvi ~/.bash_profileを入力
  2. iキーで編集モードにして,alias hoge="/hoge/hogehoge"で登録
  3. :wでファイルの上書き,:qでファイルを閉じる
  4. 再びコマンドに戻って,source ~/.bash_profileで反映させる
  5. hogeで起動

Vim プラグインを書くときの行連結の副作用回避について調べ直した

$
0
0

はじめに

Vim プラグインについて引き続き調べています。その中でいくつか Vim プラグインを読んでいたのですが、こんな記述を見ることがよくありました。

lets:save_cpo=&cpo
set cpo&vim" 処理...let&cpo =s:save_cpo
unlet s:save_cpo

こちらの記述がお作法と呼ばれているようだったのですが、なぜこの記述が必要なのか、その意味について調べたいと思います。

行連結の副作用回避

調べてみると、行連結の挙動がおかしくならないようにするための処理のようでした。

Vim の write-plugin のマニュアルを読むと、行連結、副作用の回避という項目があります。

例えばスクリプト内で以下のように複数行に渡って設定を記述している場合があります。これば複数行に渡る処理の記述がある場合、バックスラッシュを行頭につけることで記述を連結することができます。(行連結、line-continuation)と呼ばれています)

nnoremap <Leader>t  \:echo 111

しかし、Vim の挙動を Vi 互換にするかどうかを設定する compatibleオプションがオンになっていると、バックスラッシュの記述が行連結とならない場合が発生する可能性があり、処理がエラーになる場合があります。

そのため、処理の最初で、compatibleオプションの値を一時的に変数に保持しておき、Vim の初期値に設定しておきます。

lets:save_cpo=&cpo
set cpo&vim

cpocompatibleオプションの設定値であり、&で式展開しています。
ちなみに :echo &cpoとすると、現在の compatibleオプションの設定値を確認できます。

:echo &cpo
aABceFs_

それぞれの文字における設定値の意味は、マニュアルの cpoptionsの項目を参照ください。

そして処理実行後にもともとの設定値を戻してあげるという形です。

let&cpo =s:save_cpo
unlet s:save_cpo

おわりに

プラグインの作成のお作法と呼ばれているのは何だったのかがを少し知ることができました。ドキュメントを地道に読んでいくことが大事ですね。

参考


VimConf 2019 に参加してきた

$
0
0

11/3 に開催された VimConf 2019に参加してきましたので、その報告です。

よく考えると今年の参加は、(VimConfへの不参加の年を除くと)登壇しない初めての一般人としての参加でした。

開始時間ギリギリに会場に着いたところ、「隣、いいですか?」と声を掛けたお相手が、最近、Vimのヘルプの日本語訳で頑張っているIKさんでした。

発表内容一言コメント

  • Prabir Shrestha さん
    vim-lspで有名な方です。私自身はvim-lspは使ったことがないのですが、同じ作者によるasync.vimは、minpacでも使っています。

  • Justin M. Keyes さん
    言わずと知れた Neovim の現在の開発リーダーです。Neovim は Vim とは対立しているわけではないというのが聞けて良かったです。

  • mopp さん
    どのように Vim をカスタマイズすべきか、面白い話が聞けました。

  • IK さん
    どのように 1 ユーザーから各種 Vim プラグインの開発に関わっていったかという話。学生さんのような若い世代が Vim (関連)の開発に関わってくれているというのは嬉しいですね。

  • daisuzu さん
    タグジャンプの話と、plugin がちゃんと対応するともっと便利になるよという話。

  • m-nishi さん
    Vim 本体のテストに焦点を当てた話。

  • gorilla0513 さん
    ここ 1 年でいきなりめざましい活躍を見せたゴリラさん。Vim 歴 1 年とはとても思えないとても熱いプレゼンを見せていただきました。

  • Danish Prakash さん
    心理的な面から Vim をどう使うかという点が面白かったです。

  • Hezby Muhammad さん
    Vanilla Vim (素の Vim) でどこまでできるかというのを見せていただいて面白かったです。

  • ujihisa さん
    プラグインを入れることでどういうことが可能になるのか、さすが ujihisa さんです。

  • Shougo さん
    この 10 年に渡って、どのような思想でプラグインを設計・開発してきたのか。第 0 世代から第 4 世代まであるというのは、ユーザーにとっては重要かもしれません。

  • Lighting Talsk
    aiya さんの Vim scipt に対する、型付きの Time script というのが気になったのですが、何でトランスパイルしているのか聞きそびれました。

懇親会

Prabir Shrestha さんが自分のことを認識してくれていたのが分かったのは嬉しかったです。Justin さんとは言葉を交わせず、残念。
日本の伝説的なプラグイン開発者である kana さんと会話したかったのですが、終了間際に一言声を掛けることしかできず、残念。

2次会

Ruby界の有名人の a_matsuda さんと会話できた。良かった。

vimmerへ憧れる人に贈る、最強お手軽オシャレな開発環境 - vim + tmux + zsh + prezto

$
0
0

vimmer。

エンジニアを志す者なら一度は憧れるはず。

何度か練習したり本を読んでチャレンジしましたが、結局定着せずにVSCodeに出戻り・・・。

試しにvimで開発してみたいけど、始める前からvimrcとか面倒くさい設定は勘弁してほしい・・・。

これからvimで開発してみたい、やってみたけど挫折した・・というエンジニアに向けてカスタマイズ内容を紹介します。

カスタマイズ内容

カスタマイズ後は👇の様になります。

vim-tmux-prezto.png

画面分割をして下記のように使い分けています。

  • 上部 : vim
  • 下左部 : git関連
  • 下右部 : コンソール操作(ログを流したり)

※今回の一番のこだわりは画面最下部のtmuxステータスバーの設定(^^)

対象者

  • これからvimで開発したい
  • 自分でカスタマイズ方法調べるのは面倒くさい
  • とにかくカッコよくてオシャレな開発環境がいい

経緯

  • 何度かvimチャレンジしたけど、結局VSCodeに戻る
  • VSCode使ってたけど、職場が変わったら周りがvimmerばかり
  • 素のvimは心許ない、なんとなくやる気が出ない
  • 1から設定ファイル(.vimrcとか)書くのは面倒くさい

開発環境の構成

基本的な方針は有志のカスタマイズを利用(参考に)し、必要最低限のカスタマイズのみ加えます。

Qiitaやブログにたくさんのカスタマイズが紹介されていますが、多くの人に支持されているものを選定しています。※Githubのstarが多い等

  1. vim
    • amix/vimrc : vimrcの設定ファイル郡
    • vim-plug : プラグイン管理マネージャー
  2. tmux
    • gpakosz/.tmux : tmuxの設定がまとめっているやつ(ステータスバーが思うようにカスタマイズできないのでそのままは利用しない)
    • tmp : プラグイン管理マネージャー
  3. zsh
    • prezto : zshの設定ファイル群
    • powerlevel9k : zshのテーマ(preztoで設定可能)
  4. Terminal
    • iTerm2 : ターミナルアプリ
    • Ricty : プログラミング用言語(らしい)
    • powerline : アイコン等のフォントを拡張
    • nerd-fonts : 同上

作業手順

Terminal

iTerm2

利用するターミナルはiTerm2を前提として説明します。

インストールされていない方は下記からインストールしてください。

https://www.iterm2.com

マルチバイト文字対策のため、Preferences > Profiles > Text > Fontを開き、Ambiguous characters are double-widthチェックを外します。

フォント関連をインストール(Ricty + powerline + nerd-fonts)

ターミナル上でアイコンを使用するため、powerlinenerd-fontsを初めに導入します。

プログラミング用フォントRictyを同時にインストールします。
※フォントは好みなので何でもおk

# Ricty + powerline$ brew tap sanemat/font
$ brew install--with-powerline ricty

$ cp-f /usr/local/bin/brew/opt/ricty/share/fonts/Ricty*.ttf ~/Library/Fonts/ # パスを確認$ fc-cache -vf# nerdfonts$ brew install fontforge
$ git clone https://github.com/ryanoasis/nerd-fonts.git .nerd-fonts
$ cd .nerd-fonts/
$ ./install.sh # 全部はいらないかも・・# Rictyにパッチをあてる$ fontforge -script ./font-patcher ~/Library/Fonts/Ricty\ Bold\ for\ Powerline.ttf --fontawesome--fontlinux--octicons--powersymbols--powerline--powerlineextra--material--weather$ fontforge -script ./font-patcher ~/Library/Fonts/Ricty\ Discord\ Bold\ for\ Powerline.ttf --fontawesome--fontlinux--octicons--powersymbols--powerline--powerlineextra--material--weather$ fontforge -script ./font-patcher ~/Library/Fonts/Ricty\ Discord\ Regular\ for\ Powerline.ttf --fontawesome--fontlinux--octicons--powersymbols--powerline--powerlineextra--material--weather$ fontforge -script ./font-patcher ~/Library/Fonts/Ricty\ Regular\ for\ Powerline.ttf --fontawesome--fontlinux--octicons--powersymbols--powerline--powerlineextra--material--weather$ fontforge -script ./font-patcher ~/Library/Fonts/Ricty-Bold.ttf --fontawesome--fontlinux--octicons--powersymbols--powerline--powerlineextra--material--weather$ fontforge -script ./font-patcher ~/Library/Fonts/Ricty-Regular.ttf --fontawesome--fontlinux--octicons--powersymbols--powerline--powerlineextra--material--weather$ fontforge -script ./font-patcher ~/Library/Fonts/RictyDiscord-Bold.ttf --fontawesome--fontlinux--octicons--powersymbols--powerline--powerlineextra--material--weather$ fontforge -script ./font-patcher ~/Library/Fonts/RictyDiscord-Regular.ttf --fontawesome--fontlinux--octicons--powersymbols--powerline--powerlineextra--material--weather# 移動$ mv Ricty* ~/Library/Fonts/

iterm2のフォントを変更

設定画面を開きフォントを変更します。

Preferences > Profiles > Text > FontからRicty Nerd Fontを選択

zsh

bashからzshに切り替えます。
※すでにzshを利用している方は飛ばして大丈夫です。

$ chsh -s /bin/zsh

# bashの設定をzshに引き継ぎ$ cat .bashrc >> .zshrc
$ cat .bash_profile >> .zprofile
$ sed-i-e"s/.bashrc/.zshrc/g" .zshrc
$ sed-i-e"s/.bashrc/.zshrc/g" .zprofile

上記コマンド実行後、ターミナルを再起動します。

prezto

zshのフレームワーク(設定ファイル)preztoをインストールします。

$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"# 必要な設定ファイルのみコピー$ cp ~/.zprezto/runcoms/zpreztorc ~/.zpreztorc

.zpreztorcに下記設定を追加します。

$ vim .zpreztorc

# powerlevel9kをテーマに設定
zstyle ':prezto:module:prompt' theme 'powerlevel9k'# 下記2行コメントアウトを外す
zstyle ':prezto:module:tmux:auto-start'local'yes'
zstyle ':prezto:module:tmux:auto-start' remote 'yes'

.zshrcに設定を追加します。

$ vim ~/.zshrc
# 下記を追記# prezto + poworlevel9kPOWERLEVEL9K_MODE=nerdfont-complete
[-f"${ZDOTDIR:-$HOME}/.zprezto/init.zsh"]&&source"${ZDOTDIR:-$HOME}/.zprezto/init.zsh"POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir vcs)POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()POWERLEVEL9K_PROMPT_ON_NEWLINE=true
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=" \U25B8 "POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=""

vim

Macにプリインストールされていますが、Mac⇔vim間でclipboardを共有できるようbrewでインストールし直します。

$ brew update
$ brew install vim

$ source .zprofile

$ vim --version | grep clipboard
+clipboard         +keymap            +printer           +vertsplit       # ← +clipboardとなっていることを確認
+emacs_tags        -mouse_gpm-sun_workshop-xterm_clipboard

vim-plug

vimのプラグイン管理マネージャーvim-plugをインストールします。

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

vimの設定

vimの設定にはamix/vimrcを適応します。

$ git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
$ sh ~/.vim_runtime/install_awesome_vimrc.sh

amix/vimrc導入後、独自設定を記載するファイルを作成します。

$ vim ~/.vim_runtime/my_configs.vim

クリックして~/.vim_runtime/my_configs.vimの内容を確認する
callplug#begin()
"treeiconPlug'ryanoasis/vim-devicons'Plug'tiagofumo/vim-nerdtree-syntax-highlight'"bracketautoclosePlug'cohama/lexima.vim'Plug'tpope/vim-surround'"editorconfigPlug'editorconfig/editorconfig-vim'"gitPlug'tpope/vim-rhubarb'Plug'airblade/vim-gitgutter'"emmetPlug'mattn/emmet-vim'"jsPlug'pangloss/vim-javascript'"markdownPlug'tpope/vim-markdown'callplug#end()
""NERDTreeletg:NERDTreeChDirMode=1letg:NERDTreeShowBookmarks=1letg:nerdtree_tabs_focus_on_files=1letg:NERDTreeMapOpenInTabSilent = '<RightMouse>'letg:NERDTreeWinSize = 40letNERDTreeShowHidden=1letg:NERDTreeDirArrowExpandable = '▸'letg:NERDTreeDirArrowCollapsible = '▾'""GitGutterletg:gitgutter_enabled = 1setupdatetime=100letg:gitgutter_override_sign_column_highlight = 0highlightclearSignColumnhighlightGitGutterAddctermfg=2highlightGitGutterChangectermfg=3highlightGitGutterDeletectermfg=1highlightGitGutterChangeDeletectermfg=4""vim-markdownletg:vim_markdown_folding_disabled=1""linesetnumber""multibytesetambiwidth=double""clipboardsetclipboard+=unnamed""backgroundhighlight! Normalctermbg=NONEguibg=NONEhighlight! NonTextctermbg=NONEguibg=NONEhighlight! LineNrctermbg=NONEguibg=NONE

プラグインをインストール

プラグインをインストールするため下記コマンドを実行します。

$ vim + PlugInstall

tmux

端末多重化ソフトウェアtmuxをインストールします。

$ brew install tmux

マルチバイト文字対策

マルチバイト文字が含まれていると表示幅の問題で色々と不具合があるのでパッチをあてます。

$ brew edit tmux
# 60行目から追記 ※末尾のend手前まで
def patches
["https://raw.githubusercontent.com/z80oolong/tmux-eaw-fix/master/tmux-2.9a-fix.diff"]# 再インストール$ brew reinstall --build-from-source tmux

Macのクリップボードを共有できるようにする

※tmuxのバージョンが新しいといらないかもしれない

$ brew install reattach-to-user-namespace

tpm

プラグイン管理マネージャーtpmをインストールします。

$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

tmuxの設定

tmuxの設定ファイルを編集します。

$ vim .tmux.conf

クリックして~/.tmux.confの内容を確認する
# -- general -------------------------------------------------------------------
set -gdefault-terminal"screen-256color"# colors!
setw -gxterm-keysonset -sescape-time10# faster command sequences
set -sgrepeat-time600# increase repeat timeout
set -sfocus-eventsonset -gprefixC-q# GNU-Screen compatible prefix
bindC-qsend-prefixset -q -gstatus-utf8on# expect UTF-8 (tmux < 2.2)
setw -q -gutf8onset -ghistory-limit5000# boost history
# reload configuration
bindrsource-file ~/.tmux.conf \; display'~/.tmux.conf sourced'# -- display -------------------------------------------------------------------
set -gbase-index1# start windows numbering at 1
setw -gpane-base-index1# make pane numbering consistent with windows
setw -gautomatic-renameon# rename window to reflect current program
set -grenumber-windowson# renumber windows when a window is closed
set -gset-titleson# set terminal title
set -gdisplay-panes-time800# slightly longer pane indicators display time
set -gdisplay-time1000# slightly longer status messages display time
set -gstatus-interval10# redraw status line every 10 seconds
# clear both screen and history
bind -nC-lsend-keysC-l \; run'sleep 0.1' \; clear-history# activity
set -gmonitor-activityonset -gvisual-activityoff# -- navigation ----------------------------------------------------------------
# create session
bindC-cnew-session# find session
bindC-fcommand-prompt -pfind-session'switch-client -t %%'# split current window horizontally
bind - split-window -v# split current window vertically
bind_split-window -h# pane navigation
bind -rhselect-pane -L# move left
bind -rjselect-pane -D# move down
bind -rkselect-pane -U# move up
bind -rlselect-pane -R# move right
bind> swap-pane -D# swap current pane with the next one
bind< swap-pane -U# swap current pane with the previous one
# maximize current pane
bind + run'cut -c3- ~/.tmux.conf | sh -s _maximize_pane "#{session_name}" #D'# pane resizing
bind -rHresize-pane -L2bind -rJresize-pane -D2bind -rKresize-pane -U2bind -rLresize-pane -R2# window navigation
unbindnunbindpbind -rC-hprevious-window# select previous window
bind -rC-lnext-window# select next window
bindTablast-window# move to last active window
# toggle mouse
bindmrun"cut -c3- ~/.tmux.conf | sh -s _toggle_mouse"# -- urlview -------------------------------------------------------------------
bindUrun"cut -c3- ~/.tmux.conf | sh -s _urlview #{pane_id}"# -- facebook pathpicker -------------------------------------------------------
bindFrun"cut -c3- ~/.tmux.conf | sh -s _fpp #{pane_id}"# -- list choice (tmux < 2.4) --------------------------------------------------
# vi-choice is gone in tmux >= 2.4
run -b'tmux bind -t vi-choice h tree-collapse 2> /dev/null || true'run -b'tmux bind -t vi-choice l tree-expand 2> /dev/null || true'run -b'tmux bind -t vi-choice K start-of-list 2> /dev/null || true'run -b'tmux bind -t vi-choice J end-of-list 2> /dev/null || true'run -b'tmux bind -t vi-choice H tree-collapse-all 2> /dev/null || true'run -b'tmux bind -t vi-choice L tree-expand-all 2> /dev/null || true'run -b'tmux bind -t vi-choice Escape cancel 2> /dev/null || true'# -- edit mode (tmux < 2.4) ----------------------------------------------------
# vi-edit is gone in tmux >= 2.4
run -b'tmux bind -ct vi-edit H start-of-line 2> /dev/null || true'run -b'tmux bind -ct vi-edit L end-of-line 2> /dev/null || true'run -b'tmux bind -ct vi-edit q cancel 2> /dev/null || true'run -b'tmux bind -ct vi-edit Escape cancel 2> /dev/null || true'# -- copy mode -----------------------------------------------------------------
bindEntercopy-mode# enter copy mode
run -b'tmux bind -t vi-copy v begin-selection 2> /dev/null || true'run -b'tmux bind -T copy-mode-vi v send -X begin-selection 2> /dev/null || true'run -b'tmux bind -t vi-copy C-v rectangle-toggle 2> /dev/null || true'run -b'tmux bind -T copy-mode-vi C-v send -X rectangle-toggle 2> /dev/null || true'run -b'tmux bind -t vi-copy y copy-selection 2> /dev/null || true'run -b'tmux bind -T copy-mode-vi y send -X copy-selection-and-cancel 2> /dev/null || true'run -b'tmux bind -t vi-copy Escape cancel 2> /dev/null || true'run -b'tmux bind -T copy-mode-vi Escape send -X cancel 2> /dev/null || true'run -b'tmux bind -t vi-copy H start-of-line 2> /dev/null || true'run -b'tmux bind -T copy-mode-vi H send -X start-of-line 2> /dev/null || true'run -b'tmux bind -t vi-copy L end-of-line 2> /dev/null || true'run -b'tmux bind -T copy-mode-vi L send -X end-of-line 2> /dev/null || true'# copy to macOS clipboard
if -b'command -v pbcopy > /dev/null 2>&1''bind y run -b "tmux save-buffer - | pbcopy"'if -b'command -v reattach-to-user-namespace > /dev/null 2>&1''bind y run -b "tmux save-buffer - | reattach-to-user-namespace pbcopy"'# -- buffers -------------------------------------------------------------------
bindblist-buffers# list paste buffers
bindppaste-buffer# paste from the top paste buffer
bindPchoose-buffer# choose which buffer to paste from
# -- user defined overrides ----------------------------------------------------
# increase history size
#set -g history-limit 10000
# start with mouse mode enabled
set -gmouseon# force Vi mode
#   really you should export VISUAL or EDITOR environment variable, see manual
set -gstatus-keysviset -gmode-keysvi# move status line to top
#set -g status-position top
set -g @batt_icon_charge_tier8'🌕'set -g @batt_icon_charge_tier7'🌖'set -g @batt_icon_charge_tier6'🌖'set -g @batt_icon_charge_tier5'🌗'set -g @batt_icon_charge_tier4'🌗'set -g @batt_icon_charge_tier3'🌘'set -g @batt_icon_charge_tier2'🌘'set -g @batt_icon_charge_tier1'🌑'set -g @batt_icon_status_charged'🔋'set -g @batt_icon_status_charging'⚡'set -g @batt_icon_status_discharging'👎'set -g @online_icon"\u2714"set -g @offline_icon"\u2717"set -gstatus-left-length50set -gstatus-left"#[bg=colour69]#[fg=colour235] ❐ #S:#I.#P "set -gstatus-right-length110set -gstatus-right'#(curl wttr.in?format=3) | #[bg=default]#[fg=default]#{battery_icon} #{battery_percentage} | CPU: #{cpu_percentage} | Online: #{online_status} #[bg=colour239]#[fg=colour247] %H:%M #[bg=colour244]#[fg=colour238] %m/%d %a '# default statusbar colors
set-option -gstatus-bgcolour237#base02
set-option -gstatus-fgcolour136#yellow
# default window title colors
set-option -gwindow-status-stylefg='colour244'#base0
set-option -gwindow-status-stylebg='default'#set-window-option -g window-status-attr dim
# active window title colors
set-option -gwindow-status-current-stylefg='colour166'#orange
set-option -gwindow-status-current-stylebg='default'#set-window-option -g window-status-current-attr bright
set -gwindow-status-current-format'#[bg=colour239]#[fg=colour119] #I#[fg=colour249]:#[fg=colour255]#W#[fg=colour249] #F#[fg=colour239]#[bg=colour237]'set -gwindow-status-format' #I#[fg=colour237]:#[fg=colour250]#W#[fg=colour244] #F '# pane border
set-option -gpane-border-stylefg='colour235'#base02
set-option -gpane-active-border-stylefg='colour240'#base01
# message text
set -gmessage-stylebg='colour235'#base02
set -gmessage-stylefg='colour166'#orange
# pane number display
set-option -gdisplay-panes-active-colourcolour33#blue
set-option -gdisplay-panes-colourcolour166#orange
# clock
set-window-option -gclock-mode-colourcolour64#green
# List of plugins
set -g @plugin'tmux-plugins/tpm'set -g @plugin'tmux-plugins/tmux-sensible'set -g @plugin'tmux-plugins/tmux-cpu'set -g @plugin'tmux-plugins/tmux-battery'set -g @plugin'tmux-plugins/tmux-online-status'set -g @plugin'tmux-plugins/tmux-resurrect'set -g @plugin'tmux-plugins/tmux-continuum'# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run -b'~/.tmux/plugins/tpm/tpm'

プラグインをインストール

ターミナル上でCtrl + qIを叩くとインストールが始まります。

使い方

ぼくが参考にしている記事を紹介します。

tmuxチートシート ※カスタマイズ後のプレフィックスはCtrl + q

vimのキーマッピング

※いずれはまとめたい

おわりに

始めはbash + powerlineで構築しようし、試行錯誤の上現在の構成にしたので手順に誤りがあるかも知れませんm(_ _)m

見た目的には満足できる出来に仕上がりましたが、まだまだ使いこなせていないのでそこは使い倒すしかないかなと・・・。

コレでも最低限のカスタマイズと思っているので、個々の設定を掘り下げるとまだまだ伸び代はあります。(やるかはわからんが)

タイトルにお手軽とつけたが、まとめてみると全然お手軽な量じゃなかったので、今後はdotfilesにまとめワンライナーで導入できるようにしようと思います。

謝辞

今回の開発環境を構築するにあたり特に影響を受けた記事です。執筆者に感謝。

tmuxとvimによる開発作業フロー (動画)
vimって極めればvscode並のIDEになるんじゃないの? - 最強のvimrcを晒す。
tmux のステータスラインの設定を美しくした

vimのコマンドと設定のメモ

$
0
0

勉強中の関連記事まとめ
自分用の勉強記事をまとめた目次 ~擬似知識体系~

ターミナルだけで完結したいときに便利だから覚えとこう。
基本的にノーマルモード状態からのコマンド入力となる。

起動

vim vimを起動
vim ファイル名 ファイルを作成してvimを起動(パス/ファイル名)

モード選択

esc 各種モードを離脱してノーマルモードに戻る
i 入力モード
: コマンドモード
v ビジュアルモード(選択モード)

ファイル操作

:w 保存
:q 終了
:wq 保存して終了
:q! 強制終了
:e ファイル名 ファイルを開く

カーソル移動

h ←
j ↓
k ↑
l →

gg ファイルの最初へ
G ファイルの最後へ

ctrl + b 前ページへ
ctrl + f 次ページへ

w 次の単語へ
b 前の単語へ

^ 行頭へ
$ 行末へ

:3 3行目へ(行数指定)
% 対応する(対になる)カッコへ

f? 現在の行で?と一致する最初の文字へ
f? + ; 現在の行で?と一致する次の文字へ

編集

i インサート入力
a アフター入力

x 一文字削除
dd 一行削除
3dd 3行削除(行数指定)

yy コピー
3yy 3行コピー行数指定)

p ペースト(削除やコピーした際のクリップボードから)

検索

/??? キーワード検索
/??? + n 次の該当ワードへ
/??? + N 前の該当ワードへ

* カーソル位置の単語と同じ単語へ(順)
# カーソル位置の単語と同じ単語へ(逆)

置換

:s/文字列1/文字列2/ カーソルに近い最初の文字列1を文字列2に置換
:s/文字列1/文字列2/g 行内の該当する全文字列を置換
:%/文字列1/文字列2/g ファイル全体の全文字列を置換
:%s/文字列1/文字列2/gc 実行前に確認を求められる

アンドゥとリドゥ

u アンドゥ
ctrl + r リドゥ
. 直前の操作を繰り返す

画面分割

:sp 水平分割
:vs 垂直分割
ctrl + w 画面選択
:close 画面を閉じる

ビジュアルモード

v 一文字選択
V 行選択
ctrl + v 矩形選択

便利機能

= カーソル位置の行のインデントを自動整列
ctrl + n 入力中の文字列をファイル内を参照して予測変換

短径選択 + shift + i + 挿入文字列 + esc 一括で同じ編集を加える(ちょっと複雑)
短径選択 + x 一括削除

テキストオブジェクト編集

c,d,y 操作選択(置換・削除・コピー)
i,a 範囲選択(内容・全体)
t,",),] 対象選択(htmlタグ・クォーテーション・カッコ)

例)cit タグの内容のみを置換
例)cat タグ全体を置換
例)ci" " "の内容のみを置換

その他設定

:set tabstop=3 Tabスペースの文字数を指定
:syntax on テキストに色をつける
:syntax off つけない
:set ignorecase キーワード検索で小文字・大文字を含める
:set noignorecase 含めない

WindowsでC言語の勉強をしよう

$
0
0

はじめに

私が大学生になり学校の授業でC言語のプログラミングを学んでいますが、友達にvimをすすめたが複数部分で引っかかってしまったため引っかかったところと簡単な対策を書いていくために書いています。

tl;dr

最後のコピペって完成!

環境

  • Windows10
  • VisualStudio2019
  • neovim,v0.4.2
  • clang,v9.0.0
  • cmake,v3.14.3
  • python3.8.0
  • git

目標

開発者用コマンドプロンプト内でC言語を書いてサクッと実行する

必要なソフトのインストール

1 言わずもがななVisualStadio
2 他のソフトをまとめてインストールするためchocolateyをインストールする
Chocolatey
Chocolateyを使った環境構築の時のメモ
PowerShellを管理者権限で起動し下記のコマンドを入力する

PowerShellを管理者権限で起動するにはWindowsキーとxキーを同時に押しAを押すとできる

Set-ExecutionPolicyBypass-ScopeProcess-Force;iex((New-ObjectSystem.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

これの処理が終わるとPowerShell上でchoco install 〇〇などと言ったコマンドで簡単にソフトウェアをインストールすることができる

chocoinstallpython3neovimcmakellvmgit-y

このコマンドで必要なソフトのインストールが終わるのでPowerShellは終了しよう

neovimの文字コード設定

此処から先は先程インストールしたVisualStadioないにはいっているDeveloper Command Prompt for VS 2019を利用する
スタートメニュー内のVisualStadio2019のファイル内にあるためこれを選択してほしい
image.png

neovimは基本的にUTF-8という文字コードを使用するがwindows上ではべつのcp932という文字コードを使用するためそのままでは文字化けが発生してしまうなので
neovimでもcp932という設定にする必要がある
他の様々なサイトではneovimの設定ファイルは.connfigと書かれていたり
vimの設定ファイルの.vimを推奨している場合が多い
しかし、Windows上で使用する場合初期設定では$HOME\AppData\init.vimが使用されているためこちらを使うのが好ましい
まずは設定フォルダを作成するためにmkdir %APPDATA%\..\Local\nvimと入力をしよう
その後cd %APPDATA%\..\Local\nvimで今作成したフォルダに移動して
そしたらnvim init.vimと入力してneovimを起動しよう
まずは以下のような設定を行おう

letg:python3_host_prog='C:\Python38\python.exe'set fileencoding=cp932
set fileencodings=cp932,sjis,utf-8

これによってWindowsでneovimを利用したら基本的にはcp932がしようされもしもutf-8のファイルがあった場合でも読み込まれるというものになってます。

そのためこのDeveloper Command Prompt for VS 2019内においてnvim 〇〇.cとcl 〇〇.cそして〇〇の3つを繰り返してプログラムの学習ができるようになります。

設定について

ちょっとまってて

プラグインについて

neovim/vimには様々な人がプラグインを作成していてそれらを使用することでさらなる機能を得ることができます。
今回はdein.vimプラグイン管理ソフトを利用しないでインストールしていきたいと思います。

 おすすめプラグイン

vimdoc-ja

neovimのヘルプは基本的にすべて英語で書かれているためこのようなサイトに調べに来る人はとっても困るものですがこのプラグインはほとんどのヘルプを日本語に翻訳して置き換えれるものです

molokai

私の好きなカラースキームで暗めの色のやつ
インストールするだけでは反映されないので下記のようにinit.vimに追加する

init.vim
colorscheme molokai

deoplete.nvim neosnippet neosnippet-snippets

もうこの3つのファイルのためにこれを書いたと言ってもいいくらいのものである
これらのプラグインはすべて補完機能を拡張するためのプラグインである
基本的に補完機能自体は挿入モードでを押すことでできるがそれだけではないそれ以上の機能をくれるのがこれらのプラグインである
インストールするだけではこれらの本領は反映されないので下記のようにinit.vimに追加する

init.vim
letg:deoplete#enable_at_startup =1letg:deoplete#auto_complete_delay =0letg:deoplete#auto_complete_start_length =1letg:deoplete#enable_camel_case =0letg:deoplete#enable_ignore_case =0letg:deoplete#enable_refresh_always =0letg:deoplete#enable_smart_case =1letg:deoplete#file#enable_buffer_path =1letg:deoplete#max_list =10000
inoremap <expr><tab> pumvisible() ? "\<C-n>":      \ neosnippet#expandable_or_jumpable() ?
      \"\<Plug>(neosnippet_expand_or_jump)":"\<tab>"

imap <C-k><Plug>(neosnippet_expand_or_jump)smap<C-k><Plug>(neosnippet_expand_or_jump)
xmap <C-k><Plug>(neosnippet_expand_target)if has('conceal')set conceallevel=2 concealcursor=niv
endif

これらを追記することによってtabキーで補完するものを選びでそれらを展開することができるようになる

deoplete-clang neoinclude.vim

この2つのプラグインは上の3つのプラグインで拡張した補完機能にC言語のライブラリを追加するためのプラグインである
これらのプラグインはclangという先程インストールしたものを利用するため以下のようにinit.vimに追記する必要がある

init.vim
letg:deoplete#sources#clang#clang_header ='C:\Program Files\LLVM\lib\clang\'letg:deoplete#sources#clang#libclang_path ='C:\Program Files\LLVM\bin\libclang.dll'

 まとめ

以上のプラグインをすべて入れるのであればdein.tomlというファイルをinit.vimと同じフォルダに作成してください

dein.toml
[[plugins]]repo='vim-jp/vimdoc-ja.git'[[plugins]]repo='tomasr/molokai'[[plugins]]repo='Shougo/neosnippet-snippets'[[plugins]]repo='Shougo/deoplete.nvim'hook_source='''letg:deoplete#enable_at_startup=1letg:deoplete#auto_complete_delay=0letg:deoplete#auto_complete_start_length=1letg:deoplete#enable_camel_case=0letg:deoplete#enable_ignore_case=0letg:deoplete#enable_refresh_always=0letg:deoplete#enable_smart_case=1letg:deoplete#file#enable_buffer_path=1letg:deoplete#max_list=10000inoremap<expr><tab>pumvisible()?"\<C-n>":\neosnippet#expandable_or_jumpable() ?\"\<Plug>(neosnippet_expand_or_jump)":"\<tab>"'''on_i=1[[plugins]]repo='Shougo/neosnippet'hook_source='''imap<C-k><Plug>(neosnippet_expand_or_jump)smap<C-k><Plug>(neosnippet_expand_or_jump)xmap<C-k><Plug>(neosnippet_expand_target)ifhas('conceal')setconceallevel=2concealcursor=nivendif'''on_i=1on_ft=['snippet']depends=['neosnippet-snippets']#C言語の補完[[plugins]]repo='zchee/deoplete-clang'on_ft=['c','cpp','cmake','make'][[plugins]]repo='Shougo/neoinclude.vim'on_ft=['c','cpp']

またこれが以上のプラグインをすべて入れてプラグインの設定を追加したものです

init.vim
set fileencoding=cp932
set fileencodings=cp932,sjis,utf-8scriptencoding=utf-8letg:python3_host_prog='c:\Python38\python.exe'"プラグインのインストール"プラグインが実際にインストールされるディレクトリlets:dein_dir= expand('~\AppData\Local\nvim\dein')" dein.vim 本体lets:dein_repo_dir=s:dein_dir.'\repos\github.com\Shougo\dein.vim'" dein.vim がなければ github から落としてくるif&runtimepath !~# '\dein.vim'if!isdirectory(s:dein_repo_dir)
        execute '!git clone https://github.com/Shougo/dein.vim's:dein_repo_direndif
    execute 'set runtimepath^='.s:dein_repo_direndif" 設定開始if dein#load_state(s:dein_dir)call dein#begin(s:dein_dir)" プラグインリストを収めた TOML ファイルの場所letg:rc_dir= expand('~\AppData\Local\nvim\')lets:toml=g:rc_dir.'\dein.toml'" TOML を読み込み、キャッシュしておくcall dein#load_toml(s:toml,{'lazy':0})" 設定終了call dein#end()call dein#save_state()endif" もし、未インストールものものがあったらインストールif dein#check_install()call dein#install()endiffiletype plugin onletg:deoplete#sources#clang#clang_header ='C:\Program Files\LLVM\lib\clang\'letg:deoplete#sources#clang#libclang_path ='C:\Program Files\LLVM\bin\libclang.dll'

私の設定ファイルです良ければ参照してください

vimで「ci( → 文字入力」が便利という話を聞いて

$
0
0

vimでci( → 文字入力これが便利という話

こちらを参考にさせてもらいました
ありがとうございました!

これってci((部分を替えれば
他のカッコもいけんじゃね?
ってことでやってみたらできました

ciのあとを、波括弧{にしてみる

001.gif
行けた

じゃあciのあとを、ただの括弧(にしてみる

002.gif
行けるんだ

ついでにciのあとを、ダブルコーテーション"にしたら行ける?

003.gif
行けた行けた

これならどうだciのあとにコロン:

004.gif
なんも起こらず

ciのあとに括弧で囲む用途のものなら行けそう

ということで
便利なのかもしれません!

あとカーソルは括弧で囲まれた中に移動するのも忘れずに

でした!

【ショートカット実践】VSCodeにVimを入れるまで

$
0
0

前書き

ここ最近いろいろ面倒です。
正直ポインターを動かすことすら億劫に感じます。
なので、ショートカットとコマンドを駆使して、
ポインターをできるだけ使わない方法を模索してみようと思いました。
その手始めとして、VSCodeにVimのプラグインを入れてみることにしました。

以下手順

電源を入れる

電源ボタンをポチッ。

パスワードを入力する

キーボードをカタカタ。

検索を開く

Win + s

VSCodeを開く

「vscode」 + ENTER

Extensions(拡張機能)を開く

CTRL + SHIFT + x

プラグインを検索する

「vim」

プラグインを選択する

CTRL + ↓ + ENTER

「Vim」というプラグイン名だったらOK

プラグインをインストールする

最初にして最後のポインター操作。
インストールボタンをポチッとな。

これでVSCodeにVimのプラグインを入れることができました。

まとめ

ショートカットを利用すれば、起動してからインストールまで
ほとんどポインターを動かすことなくできるということが分かりました。
また、ショートカットであれば操作内容が一意に決まるということも
一周回って初学者にやさしいのかもしれないと思いました。

今度はコマンド実践の記事を書けたらと思います。

githubのpushに苦戦、、プログラミング勉強32日目

$
0
0

プログラミング初心者はgithubにpushするだけでも一苦労です。

途中までは下記の記事どうりに行きましたが、エラーが、、、!
https://gist.github.com/KosukeGit/8bdab3f9d2d63334ffa178c628ded087

error: failed to push some refs to 'git@github.com:name/app.git'

調べたところどうやら2つREADME.mdがあり、それがぶつかってるとのこと。

README.mdをvimにて取り除けば解決しました

下記の記事が参考になります
https://yu8mada.com/2018/06/13/how-to-resolve-a-merge-conflict-in-git/

ここら辺はよく使いますね
git status
git remote -v


VSCodeでNERDTreeの操作を再現

$
0
0

はじめに

NERDTreeはディレクトリツリーを表示してファイル操作を行うVimのプラグインです。
VSCodeは統合開発環境のためエクスプローラー機能が存在します。そのため,キーバインディングを変更することによって,NERDTreeをVSCodeで再現します。

再現と言っても,完全には再現できないため,以下の機能のみです。
- ファイル選択,フォルダの展開
- エディタとエクスプローラー間のフォーカス移動
- エクスプローラーの表示・非表示トグル
- mキーとの組み合わせによるファイルシステム操作

手順

  1. Code > 基本設定 > キーボードショートカットを選択しキーボードショートカットの設定画面が出たら,右上のスクリーンショット 2019-11-11 19.28.00.pngからJSON表示に切り替える。

  2. 以下のコードを貼り付ける.

keybindings.json
[//--------------------------------------------------//NERDTree風//--------------------------------------------------//サイドバーの表示トグル(サイドバーの表示・非表示){"key":"ctrl+n","command":"workbench.view.explorer","when":"!explorerViewletVisible && vim.mode != 'SearchInProgressMode' && vim.mode != 'Insert'"},{"key":"ctrl+n","command":"workbench.action.toggleSidebarVisibility","when":"explorerViewletVisible && !searchViewletVisible && !inDebugMode && vim.mode != 'SearchInProgressMode' && vim.mode != 'Insert'"},//サイドバーフォーカストグル(サイドバーは表示したまま,フォーカスを切り替え){"key":"ctrl+h","command":"workbench.action.focusSideBar","when":"editorFocus"},{"key":"ctrl+h","command":"workbench.action.focusFirstEditorGroup","when":"!editorFocus"},//ファイルの時は"Enter"or"o"で同一タブで表示{"key":"Enter","command":"list.select","when":"explorerViewletFocus && explorerViewletVisible && !explorerResourceIsFolder && !inputFocus"},{"key":"o","command":"list.select","when":"explorerViewletFocus && explorerViewletVisible && !explorerResourceIsFolder && !inputFocus"},////フォルダのときは"Enter"or"o"で展開{"key":"Enter","command":"list.toggleExpand","when":"explorerViewletFocus && explorerViewletVisible && explorerResourceIsFolder && !inputFocus"},//"s"で別ウィンドウで開く{"key":"s","command":"explorer.openToSide","when":"explorerViewletFocus && explorerViewletVisible && !explorerResourceIsFolder && !inputFocus"},//---ファイルシステム系---//"m + r"でリネーム{"key":"m r","command":"renameFile","when":"explorerViewletVisible && filesExplorerFocus && !inputFocus"},//"m + c"でコピー{"key":"m c","command":"filesExplorer.copy","when":"explorerViewletVisible && filesExplorerFocus && !inputFocus"},//"m + p"でペースト{"key":"m p","command":"filesExplorer.paste","when":"explorerViewletVisible && filesExplorerFocus && !inputFocus"},//"m + a"でファイル追加{"key":"m a","command":"explorer.newFile","when":"explorerViewletVisible && filesExplorerFocus && !inputFocus"},//"m + d"で削除{"key":"m d","command":"deleteFile","when":"explorerViewletVisible && filesExplorerFocus && !inputFocus"},//"m + f"でフォルダ追加{"key":"m f","command":"explorer.newFolder","when":"explorerViewletVisible && filesExplorerFocus && !inputFocus"},]

操作方法

コマンド  説明
Ctrl+n  エクスプローラーの表示・非表示
Ctrl+h  エクスプローラーとエディタ間のフォーカス移動
Enter, o     同じウィンドウでファイルを開く(フォルダのときは展開)
s          別ウィンドウでファイルを開く(垂直方向)
m+rファイル・フォルダリネーム
m+cファイル・フォルダコピー
m+pファイル・フォルダペースト
m+aファイル追加
m+fフォルダ追加
m+dファイル・フォルダ削除

補足

条件として!inputFocusをつけているのは,ファイル追加などエクスプローラー上でテキスト編集を行う際に,コマンドとして使用しているキーを入力できるようにするため。

参考

VSCodeとVimとNERDTree

vim terminalでデフォルトのターミナル幅を、縦横で分けたい

$
0
0

++rows, ++cols で制御してるらしい。

なので、.vimrcに以下のように書く

nnoremap m :res +5<CR>
nnoremap , :res -5<CR>
nnoremap <C-x>s :bot  term ++close ++rows=12<CR>
nnoremap <C-x>v :vert term ++close ++cols=66<CR>

以上です

vimを教えるのがめんどくさいので、代わりにリンク集を作っておく

$
0
0

vimを教えるのがめんどくさいので、代わりにリンク集を作っておく

一から説明するのは難易度も物量的なコストも非常に高いので、
代わりによさげなリンクを集めておく

あと、学習コスト、設定を煮詰めるコスト共に異様に高いので、正直、VS Codeとかでいいんじゃない?とも思う。

とりあえずチュートリアルぽいの

適当にひろったチュートリアル。まぁこの辺はどれでも

なんでコマンドモードがあるの?って質問への回答

vimは移動や検索が多様なのがポイントだよ、それにはコマンドモードがあるほうが便利なんだよ
っていう感じを伝えてくれる説明。

移動の仕方のもう少し詳しいまとめ

Vimを使いやすく設定する(Plugin無し)

デフォルトはいろいろ使いにくい設定なので、設定ファイルを編集して使いやすくする。
設定ファイルは~/.vimrcにある(UNIX系の場合)

補足)vimrcのset系の見方

set ~~でその機能がON。set no~~~でその機能がOFF

言語に関する設定(必須)

先頭に下記を書いておく

set encoding=utf-8scriptencoding utf-8set termencoding=utf-8set nobomb
set fileencodings=ucs-bom,utf-8,euc-jp,cp932,sjis,iso-2022-jp-3,iso-2022-jp,eucjp-ms,euc-jisx0213
set fileencoding=utf-8 " 保存時の文字コード
set fileformats=unix,dos,mac " 改行コードの自動判別、左側が優先される

見た目の設定

細かい設定が多いのでまとめて

set tw=0 " 自動で改行する画面幅(文字数)。0で改行なし
set wrap " 長い行を折り返して表示。こっちは見た目だけで改行はしない
set nocursorline " カーソル行を強調表示する。highlightで表示内容を変更
set showmatch " 括弧入力時に対応する括弧をフラッシュして表示
set matchtime=3 " 上記のshowmatchの表示秒数を3秒にする
setnumber " 行番号を表示
set nolist " タブや改行を表示。結構うざいのでnoにしとく
set notitle " タイトルを表示
set scrolloff=0set cmdheight=2 " コマンドラインの高さ

" 下記4行、ステータスライン強化プラグインを使う場合はあまり触らないようにするset noruler " ルーラーを表示
"set laststatus=2 " 常にステータス行を表示"set noshowmode " 現在のモードを表示"set showcmd " コマンドをステータス行に表示" キーワードで色を変えるif has('syntax')
  syntax enable
endif

インデントの設定

とりあえずこの辺設定しとく

set expandtab " タブをスペースに展開する
set tabstop=4 " タブの画面上での幅
set softtabstop=4 " 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set shiftwidth=4 " smartindentで増減する幅
set autoindent " 自動的にインデントする
set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する
set smarttab "新しい行を作った時に高度な自動インデントを行う
set backspace=indent,eol,start " バックスペースでインデントや改行を削除できるようにする
nnoremap <Leader>f:set foldmethod=indent<CR>

検索の設定

検索は基本/検索したい文字<CR>。次検索はn前検索はp

set incsearch " インクリメンタルサーチ.1文字入力毎に検索を行う
set ignorecase " 検索パターンに大文字小文字を無視
set smartcase " 大文字小文字の両方が含まれている場合は大文字小文字を区別
set hlsearch " 検索結果をハイライト
" Leader+ESCキーでハイライトの切り替え
nnoremap <Leader><Esc>:<C-u>setnohlsearch!<CR>set wrapscan " 検索時にファイルの最後まで行ったら最初に戻る

関数の定義元とかにジャンプしたい

ctagsでtagsファイル作る。あとは<C-]>でジャンプ、<C-t>で戻る

もう少し詳しい説明
- CtagsでVimにタグジャンプ機能を追加する - Qiita

universal-ctags公式:universal-ctags/ctags: A maintained ctags implementation
Windows版のバイナリ:universal-ctags/ctags-win32: Universal Ctags Win32 daily builds

画面を分割したい

<C-w>vで縦分割
<C-w>sで横分割
入れ子もOK

より詳しい説明
Vim のウィンドウ分割機能 - Vim のブログ

ターミナルでコマンド打ったり結果みながら作業したい

:termでvim内でターミナルが起動する

ssh等のリモート接続を切断しても編集状態をそのままにしたい

vim単独では無理。ターミナル上でtmuxを起動し、そのうえでvimを起動すればそれっぽくなる

tmuxを使い始めたので基本的な機能の使い方とかを整理してみた - 完熟トマト

PCごとに設定するのがめんどくさい

gitに.vimrcおいて、それを落とすようにする

文中の全角スペースを表示して欲しい

下記をvimrcに追記

" 全角スペースの表示function! ZenkakuSpace()
  highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=grey
endfunctionif has('syntax')
  augroup ZenkakuSpace
    autocmd!
    autocmd ColorScheme * call ZenkakuSpace()
    autocmd VimEnter,WinEnter,BufRead * letw:m1=matchadd('ZenkakuSpace',' ')
  augroup END
  call ZenkakuSpace()endif

補足)vimrcでのショートカットキー設定の見方

設定例のところどころでキー設定も行っているが、その補足。

vimrcのショートカットキー設定はnmap等のmap系のコマンドで始まるので
その行を見れば、どのキーに何の機能を割り当てたのかがわかる。
下記のように書かれていればcontrolとkを同時押し~~~~に書かれている機能が実行される、という意味。
<silent>はひとまず無視しておいていい。無い場合もある。

nmap <silent><C-k>~~~~

<leader>は「これを押したらショートカットの開始」という意味のキーで、ユーザーが任意に設定できる
下記の場合だと、「リーダーに設定したキー押して、それからxを押す」という意味。

nmap <silent><Leader>x~~~~

リーダーの設定例。上がスペースで下がコンマの場合。使いやすいものをお好みで設定。

let mapleader ="\<Space>"let mapleader =","

Pluginを使って、Vimを使いやすくする

機能拡張のプラグインを使って使いやすくする。
機能とプラグインのピックアップ基準は手元の自分のvimrcに記載があるもの。

以降、プラグインマネージャーとして
junegunn/vim-plug: Minimalist Vim Plugin Manager
使っている場合

デフォルトよりましな色合いにしたい

一例。vim カラースキームで検索したら色々でてくる

Plug 'rhysd/vim-color-spring-night'
colorscheme spring-night

gitの差分を行単位で目印して欲しい

airblade/vim-gitgutter使う。詳細は下記。
Vimメモ : vim-gitgutterで差分を左端に表示する - もた日記

Plug 'airblade/vim-gitgutter'" 目印行を常に表示するif exists('&signcolumn')  " Vim 7.4.2201set signcolumn=yes
elseletg:gitgutter_sign_column_always=1endif

git周りを便利にしたい

tpope/vim-fugitiveを使う。
ステータスラインにブランチ名を表示する場合は次項のlightline.vimの設定する。
詳しい使い方は下記。
VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい - SELECT * FROM life;

Plug 'tpope/vim-fugitive'" vim-fugitive: Gitを便利に使う" grep検索の実行後にQuickFix Listを表示する
autocmd QuickFixCmdPost *grep* cwindow" コマンドをキー登録
nnoremap <silent><Leader>g:Gstatus<CR>
nnoremap <silent><Leader>d:Gdiff<CR>
nnoremap <silent><Leader>b:Gblame<CR>

ステータスラインに色々情報を表示したい

itchyny/lightline.vimを使う
公式:itchyny/lightline.vim: A light and configurable statusline/tabline plugin for Vim

Plug 'itchyny/lightline.vim' " ステータスラインの表示強化
set laststatus=2 " ステータスラインを常に表示
set noshowmode " 現在のモードを表示
set showcmd " 打ったコマンドをステータスラインの下に表示
set ruler " ステータスラインの右側にカーソルの現在位置を表示する
" let g:lightline = { 'colorscheme': 'wombat' }" let g:lightline = { 'colorscheme': 'powerline' }letg:lightline={  \'colorscheme':'powerline',  \'active':{  \'left':[['mode','paste'],  \['gitbranch','readonly','filename','modified']]  \},  \'component_function':{  \'gitbranch':'fugitive#head'  \},  \}

書式チェック(linter)と修正(fixer)を自動でして欲しい

w0rp/ale使う
公式:dense-analysis/ale: Check syntax in Vim asynchronously and fix files, with Language Server Protocol (LSP) support

下記はpythonの例。
参考:ALE(on NeoVim)でPythonコードを楽に整形する - Qiita

Plug 'w0rp/ale'" ファイル保存時にLinterを実行する"let g:ale_lint_on_save = 1" テキスト変更時にはLinterを実行しないletg:ale_lint_on_text_changed='never'" Linter(コードチェックツール)の設定letg:ale_linters={  \'python':['flake8','mypy'],  \}" ファイル保存時にはFixerを実行しないletg:ale_fix_on_save=0" テキスト変更時にはFixerを実行しないletg:ale_fix_on_text_changed='never'" Fixer(コード整形ツール)の設定letg:ale_fixers={  \'python':['autopep8','black','isort'],  \}" 余分な空白があるときは警告表示letb:ale_warn_about_trailing_whitespace=0" ALE実行時にでる目印行を常に表示letg:ale_sign_column_always=1" Leader + l で表示非表示の切り替え
nmap <silent><Leader>l:ALEToggle<CR>" Leader + x でfixerの実行
nmap <silent><Leader>x<Plug>(ale_fix)" Ctrl + j/k でエラー行を移動する
nmap <silent><C-k><Plug>(ale_previous_wrap)
nmap <silent><C-j><Plug>(ale_next_wrap)

ctagsを自動で実行して欲しい

soramugi/auto-ctags.vim使う。ファイル保存時に自動で実行してくれる。

Plug 'soramugi/auto-ctags.vim'" Ctags auto-executionletg:auto_ctags=1

ファイル選択をツリーでしたい

scrooloose/nerdtreeを使う。

Plug 'scrooloose/nerdtree'let NERDTreeShowHidden =0 " 隠しファイルを表示しない(Iで切り替え)
nmap <silent><Leader>n:NERDTreeToggle<CR>

ファイルの切り替えを素早くしたい

Shougo/unite.vimを使う。
常用セットを覚えるだけでも随分違う
(キーはLeaderにアサインしたキー2連打がいい感じ使える)

Plug 'Shougo/unite.vim' " ファイルオープンを便利に
Plug 'Shougo/neomru.vim' " Unite.vimで最近使ったファイルを表示できるようにする
" 常用セット
nnoremap <Leader>, :Unite buffer file_mru<CR>
" バッファ一覧
nnoremap <Leader>ub :Unite buffer<CR>
" ファイル一覧
nnoremap <Leader>uf :UniteWithBufferDir -buffer-name=files file<CR>
" レジスタ一覧
nnoremap <Leader>ur :Unite -buffer-name=register register<CR>
" 最近使用したファイル一覧
nnoremap <Leader>um :Unite file_mru<CR>
" 全部乗せ
nnoremap <Leader>ua :UniteWithBufferDir -buffer-name=files buffer file_mru bookmark file<CR>
" sourcesを「今開いているファイルのディレクトリ」とする
noremap :uff :<C-u>UniteWithBufferDir file -buffer-name=file<CR>
"" ウィンドウを分割して開く
au FileType unite nnoremap <silent> <buffer> <expr> <C-J> unite#do_action('split')
au FileType unite inoremap <silent> <buffer> <expr> <C-J> unite#do_action('split')
"" ウィンドウを縦に分割して開く
au FileType unite nnoremap <silent> <buffer> <expr> <C-K> unite#do_action('vsplit')
au FileType unite inoremap <silent> <buffer> <expr> <C-K> unite#do_action('vsplit')

末尾の半角スペース表示して欲しい

bronson/vim-trailing-whitespaceを使う

Plug 'bronson/vim-trailing-whitespace' " 行末の半角スペースを可視化

インデントを視覚化して欲しい

Yggdroot/indentLine使う。concealで非表示にされる項目があったりするので注意。様子見ながらつかう。
公式:Yggdroot/indentLine: A vim plugin to display the indention levels with thin vertical lines

Plug 'Yggdroot/indentLine'"let g:indentLine_char_list = ['|', '¦', '┆', '┊']"let g:indentLine_char_list = ['¦', '┆', '┊']letg:indentLine_char='|'letg:indentLine_showFirstIndentLevel=1letg:indentLine_color_term=244letg:indentLine_color_gui='#708090'letg:indentLine_fileTypeExclude=[  \'markdown','help','nerdtree','calendar','thumbnail','tweetvim']

markdownのテーブルの整形とかしたい

たとえばmarkdownでテーブル書いてる場合とかに見た目を整形したい場合、
junegunn/vim-easy-align使う。
基本的な使い方は、整形したい文字を選択してga*|。最後の|は区切り文字。
より詳しい説明
vim-easy-alignでvimmerへの道を極めよう - Qiita

Plug 'junegunn/vim-easy-align'" 使い方:`gaip#` or `vipga#` `#`は区切り文字" Start interactive EasyAlign in visual mode (e.g. vipga)
xmap ga <Plug>(EasyAlign)" Start interactive EasyAlign for a motion/text object (e.g. gaip)
nmap ga <Plug>(EasyAlign)

Vimで十字キーの動作が怪しくなった時の対処

$
0
0

以下を実行

:set nocompatible
:set backspace=indent,eol,start

vimでカーソルを表示行で上下移動できるようにする

$
0
0

 .vimrcに以下の記述を追加します。
 検索して出てくるのは、なぜかノーマルモードの時用の設定しかないので、挿入モードでも同じになる設定を追加してあります。

"カーソルを表示行で上下移動する。物理行移動は<C-n>,<C-p>
nnoremap j gj
nnoremap k gk
nnoremap <Down> gj
nnoremap <Up>   gk
inoremap <Down> <C-o>gj
inoremap <Up>   <C-o>gk

 .vimrcを更新後vimを再起動すれば、設定が反映されます。

Viewing all 5751 articles
Browse latest View live


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