WebHU - Programozási kérdések és válaszok

A folytatásos sorok behúzása eltérő attól függően, hogy egy új sorban kezdődnek-e vagy sem

Megpróbálom rávenni a vim-et, hogy az új sorban kezdődő folytatásos sorokat a következőképpen húzza be:

def foo
  open_paren_at_EOL(
      100, 200)

  a = {
      :foo => 1,
  }
end

A Vim 7.3 alapértelmezett behúzása [1] ezekhez a sorokhoz így néz ki:

def foo
  open_paren_at_EOL(
    100, 200)

  a = {
    :foo => 1,
  }
end

Több cino= értéket is kipróbáltam, és még a [2] .vim szkriptjét is megpróbáltam adaptálni, de sikertelenül.

A .vimrc-em itt található:

https://github.com/slnc/dotfiles/blob/master/.vimrc

Kösz!


  • Ezt is szeretném, de hiányzik a hozzáértésem a megoldásához. 05.10.2012

Válaszok:


1

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
  • Köszönöm Andrew, tökéletesen működik. Nem tudod, hány billentyűleütést spórolsz meg most nekem :) 07.10.2012
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..