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

怖くなかったVim script

$
0
0

advent calendarの8日目です

これは

Vim scriptに触れたのでふんわり紹介
Vim scriptとか.vimがつくやつってunite.vimとかみたいに遠い存在かと思っていたがそんなことはなかった

前提条件

  • 環境
    • VIM - Vi IMproved 8.1 (2018 May 18, compiled Sep 18 2019 03:49:48)

書かないこと

  • 基本文法の解説
  • チュートリアル
  • モチベーション
    • 「普段、言語は何を?」って聞かれて「Vim scriptを少々」とか言えるようになりたくない???

参考文献

自分が触れていなかっただけで楽しめる入門記事はたくさんあった

本編

そもそも何

Vim script は Vim に組み込まれたスクリプト言語である。
https://ja.wikipedia.org/wiki/Vim_script

Wikipediaだがなるほど

Vim script 言語は vimrc ファイルや構文ファイルなど、さまざまな目的に使われま
す。この章では Vim script の書き方を説明します。説明することがたくさんあるので
大きな章になってます。
https://vim-jp.org/vimdoc-ja/usr_41.html

(コピペの結晶となっているvimrcを読み解けるようになる日が来るのか...という顔)

Hello World

個人的には新しい言語・環境を学ぶ時はHelloWorldが大きな境目だと思っていて、実行さえできれば先駆者の記事やリファレンスを読みながら進んでいける(はずな)のでHello Worldだけはやる

sh
vim hello_vimscript.vim
hello_vimscript.vim
echo "hello vim script"

ファイルを開いたまま

exコマンド
:source hello_vimscript.vim
出力
hello vim script

できた!
コマンドラインからの実行もできるが割愛

遊んでみた

構文解析してプラグイン開発!はまだ遠いので身近なところからやる
手前味噌(厳密には意味違う)だがこれを自動化する

できるもの

開始時間と終了時間と1単位(分)を入力するとToDoを管理できるフォーマットを出力する

コード

make_today_schedule.vim
command!-nargs=* MTS call MakeTodaySchedule(<f-args>)lets:d_st=10lets:d_ft=19lets:d_uom=30function!s:help()
  echo "Usage:"
  echo "\tMTS <StarHour> <FinishHour> <UnitOfMinute>"
  echo "Default:"
  echo "\tStarHour: ".s:d_st
  echo "\tFinishHour: ".s:d_ft
  echo "\tUnitOfMinute: ".s:d_uom
  echo "Example:"
  echo "\tMTS 9 18 30"returnendfunctionfunction! MakeTodaySchedule(...) abort
  " defaultを入力letst= exists("a:1") ? a:1:s:d_stlet ft = exists("a:2") ? a:2:s:d_ftlet uom = exists("a:3") ? a:3:s:d_uomifst=="help"calls:help()returnendififst<0
    echo "Message:"
    echo "\tStartHour must be after 0:00"calls:help()returnendif" 時間以外のテンプレートlet now = localtime()
  execute "normal a"."# ToDo on ". strftime("%Y/%m/%d", now)."\n\n"
  execute "normal a"."## ToDos"."\n"
  execute "normal a"."- ToDoA"."\n"
  execute "normal a"."- ToDoB"."\n\n"
  execute "normal a"."## Schedule"."\n"" 分に換算let minute_of_range =(ft -st) * 60" uom は区切りたい分の単位let num_of_line = minute_of_range / uom
  foriin range(0, num_of_line)leth=st+i * uom / 60letm=i * uom % 60" 0-9分の表記直しifm<10
      execute "normal a"."### ".h.":0".m."\n"else
      execute "normal a"."### ".h.":".m."\n"endif" 記入例ifi==0
      execute "normal a"."- ToDoA"."\n"endifendforendfunction

echoとかexecuteを連打してるのは見かけ良くなさそうなので、他の人のコードを読んで勉強せねば

終了時間を24以下としていないのは、自分が締め切り3日前に0:00~72:00と考えるようなよくない人間だから

実行

todoを管理するファイルを開く

sh
vim todo.md

todo.mdを開いた状態で

exコマンド
"読み込み:source make_today_schedule.vim"実行(デフォルト値):MTS
"実行(8時から20時、37分単位(半端な数でもとりあえずは動く)):MTS 82037"実行(ヘルプ):MTS help

下記は:MTS 8 20 37の実行結果

todo.md
# ToDo on 2019/12/08

## ToDos
- ToDoA
- ToDoB

## Schedule
### 8:00
- ToDoA
### 8:37
### 9:14
### 9:51
### 10:28
### 11:05
### 11:42
### 12:19
### 12:56
### 13:33
### 14:10
### 14:47
### 15:24
### 16:01
### 16:38
### 17:15
### 17:52
### 18:29
### 19:06
### 19:43

下記は:MTS helpの実行結果

Usage:
        MTS <StarHour> <FinishHour> <UnitOfMinute>
Default:
        StarHour: 10
        FinishHour: 19
        UnitOfMinute: 30
Example:
        MTS 9 18 30

使い方

タスクをToDosに列挙してyypを駆使して予定を立てる

おわり

これまでは思考停止でVim scriptは強者の戯れだと恐れていたが楽しいことがたくさんできそうだと思った

プログレスバーとかめちゃくちゃ楽しそうなので次はこちらをやりたい


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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