Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save supermomonga/5943236 to your computer and use it in GitHub Desktop.
Save supermomonga/5943236 to your computer and use it in GitHub Desktop.

How to detect the missing end using Vim script.

要求

  • smartinput.vimを用い、<CR>を入力した際、状況に応じてendを自動で入力させる

アプローチ

<CR>が入力された際、以下の内容を実装した関数をcallする。

<CR>を入力した際にカーソルが存在する行のインデントの深さを取得。これをl:smartend_indent_levelとする。カーソルが存在する行から一行ずつインデントの深さをチェックして行き、l:smartend_indent_levelと同じインデントの深さで、インデントの直後にendが存在する行に到達した場合、何もせずに処理を終了。l:smartend_indent_levelより浅いインデントを持つ行、ただし深さ0の場合は除く、に到達した場合はその行にl:smartend_indent_levelと同じ深さのインデント及びendを挿入し処理を終了。

要調査

  • 任意の行のインデントの深さ、つまり行頭から半角スペースがいくつ連続しているか、を取得する方法
    • tab文字によるインデントは想定しない
  • 任意の行の任意の位置に任意の文字列を挿入する方法

memo

深さ0、の判定。 現状の使用だと以下の様なコードでendが入力されない

class Moge
  def missing_end
#ここはスルーしてほしい
    puts :hi
#ここはスルーしてほしくない
  def いい感じ
    puts :sugoi
  end
end

これも。

def missing_end
#ここはスルーしてほしい
  puts :hi
#ここはスルーしてほしくない
def いい感じ
  puts :sugoi
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment