Az ilyen behúzás érdekében megtudhatja, hogy a GetRubyIndent
függvény mely területei relevánsak ezekhez a folytatásokhoz, és növelje a visszatérési értékeket. Az általad megadott példában úgy tűnik, hogy ez teszi a feladatot:
diff --git a/indent/ruby.vim b/indent/ruby.vim
index 05c1e85..6f51cf2 100644
--- a/indent/ruby.vim
+++ b/indent/ruby.vim
@@ -368,7 +368,7 @@ function GetRubyIndent(...)
" If the previous line ended with a block opening, add a level of indent.
if s:Match(lnum, s:block_regex)
- return indent(s:GetMSL(lnum)) + &sw
+ return indent(s:GetMSL(lnum)) + &sw * 2
endif
" If the previous line ended with the "*" of a splat, add a level of indent
@@ -383,7 +383,7 @@ function GetRubyIndent(...)
if open.pos != -1
if open.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
if col('.') + 1 == col('$')
- return ind + &sw
+ return ind + &sw * 2
else
return virtcol('.')
endif
Nem vagyok benne teljesen biztos, hogy ez nem fog semmi mást összetörni, de számomra biztonságos változásnak tűnik. Ha olyan eseteket talál, amelyek nem a kívánt módon vannak behúzva, akkor csak kemény módon javíthatja meg: keresse meg a return
kifejezést a függvény határain belül, majd növelje a visszaadott behúzást még egy &shiftwidth
-el (vagy &sw
). Ellenőrizze, hogy működik-e, és ha nem, vonja vissza, majd lépjen tovább a következő return
-ra, amíg meg nem találja.
vim-ruby
elágazhatja, vagy egyszerűen átmásolhatja a indent/ruby.vim
fájlt a ~/.vim/indent/ruby.vim
mappába, és tetszés szerint módosíthatja. Ennek elsőbbséget kell élveznie a indent/ruby.vim
köteggel szemben.
Ha teljesen feltűnésmentes megoldást keres, az nehéz lenne. Elméletileg felülírhatja a GetRubyIndent
függvényt behúzóként a setlocal indentexpr=CustomGetRubyIndent(v:lnum)
használatával, majd definiálhat egy CustomGetRubyIndent
függvényt, amely csak bizonyos esetekben valósítja meg az Ön viselkedését, és delegálja a GetRubyIndent
-re. Nem javasolnám, hogy ilyen messzire menjen, de ez meglehetősen zavaros lehet.
06.10.2012