Regeleinden toevoegen in ipython

Als ik een for-lus in iPython of een meerregelig commando invoer, hoe ga ik dan terug en voeg ik er regels aan toe? Ik heb dit uitgevoerd:

for row in table.find_all('tr'):
    cells = row.find_all('td')
    for c,cell in enumerate(cells):
        print c,":",cell.get_text().strip()
    try:
        this = cells[0]
        that = cells[1]
        the_docket = cells[2]
        other_thign = cells[3]
        jumble = re.sub('\s+',' ',str(cells[5])).strip()            
    except:
        "Nope"

En realiseerde me dat ik er een regel aan moest toevoegen, maar ik kan niet gewoon op “enter” drukken in iPython, b/c die de opdracht uitvoert. Dus kan ik die opdracht met meerdere regels in iPython bewerken?


Antwoord 1, autoriteit 100%

Ik heb al een tijdje last van dit probleem. Ik ontdekte net dat bij gebruik van Ctrl-qCtrl-j(dat is een kleine letter Q, J, je hoeft de shift-toets niet ingedrukt te houden) toe te voegen een linefeed naar een bestaande IPython-bewerkingssessie.

for li in some_list: print(li)    

Verplaats de cursor na de dubbele punt en druk op Ctrl-qCtrl-j

for li in some_list:
print(li)

IPython: 5.2.1, iTerm2: 3.0.15, macOS: 10.12.6


Antwoord 2, autoriteit 74%

Met de magische functie %editin iPython kun je code in je favoriete editor bewerken en deze vervolgens uitvoeren alsof deze rechtstreeks is getypt. Je kunt ook code bewerken die je al in de repl hebt getypt, omdat deze is opgeslagen in een speciale variabele, bijvoorbeeld:

In [1]: def foo(x):
   ...:     print x
   ...:     
In [2]: %edit _i1

Antwoord 3, autoriteit 67%

Er is ook een manier om een ​​nieuwe regel direct in de repl toe te voegen: ctrl-v, ctrl-j

Met ctrl-v kun je in principe een controlecode verzenden en dan is ctrl-j de code voor een nieuwe regel (line-feed). Het is een beetje onhandig om te typen, maar heeft het voordeel dat het ook in de reguliere Python-shell werkt, evenals in Bash zelf.

Bewerken: in iTerm2 kun je het in ieder geval ook aan een enkele sneltoets toewijzen. Ik heb ctrl-enter ingesteld op “Send hex codes” van 0x16 0x0a. Kan ook cmd-enter of wat dan ook gebruiken.


Antwoord 4, autoriteit 40%

U kunt ctrl+ongebruiken (d.w.z. druk op de bedieningsknop en voer de tekens ‘o’, ‘n’ in terwijl u deze ingedrukt houdt). Je kunt het ook in twee stappen doen – ctrl+octrl+nmaar ik vind het eerste gemakkelijker.

  • ctrl-o– ga naar de modus met meerdere regels
  • ctrl-n– krijg vanaf nu toegang tot de opdrachtgeschiedenis.
    Maar aangezien er geen voorwaartse geschiedenis is, gaat de cursor gewoon naar de volgende regel.

Ik heb geverifieerd dat het werkt met zowel IPython 5.3.0 als IPython 7.3.0 op een machine met git bash 2.18.0 + windows 7.


Antwoord 5, autoriteit 7%

Voor de volledigheid: nieuwere IPython-versies (0.11+) hebben een zeer mooie grafische console waarmee je door je code kunt navigeren met de pijlen en zelfs de cursor kunt verplaatsen met de muis.

In meerregelige instructies nemen sommige toetsen een speciale functie aan (pijlen om te navigeren, Enterom een ​​regeleinde in te voegen en andere). U moet de cursor aan het einde van de laatste regel van de instructie plaatsen om standaardgedrag te krijgen, b.v. laat de pijl-omhoog “vorige instructie” betekenen in plaats van “verplaats de cursor naar de vorige regel”. Of gebruik Enterin de betekenis van “code uitvoeren” in plaats van “regeleinde in het midden van code invoegen”.

De documentatie erover is een beetje schaars en gefragmenteerd in verschillende pagina’s, dus hier zijn de drie essentiële links om ermee aan de slag te gaan:

  1. Inleiding tot de Qt-console

  2. IPython configureren met behulp van mooie profielbestanden per gebruiker van opdrachtregelargumenten

    U bent geïnteresseerd in de ipython_qtconsole_config.py

  3. Een grafische ipython krijgen console op Windows 7?


Antwoord 6, autoriteit 7%

Een gemakkelijke manier om dit te doen is door de ;\operator te gebruiken. ;om aan te geven dat dit het einde van een opdracht is en \om aan te geven dat de opdracht als volgt in een nieuwe regel volgt:

In[4]: password = "123";\
       username = "alpha"

Hiermee kun je meerdere regelcommando’s in ipython hebben zonder de editor aan te roepen


Antwoord 7, autoriteit 5%

Typ Ctrl+qen vervolgens Enter. Zoals anderen al hebben opgemerkt, kunt u met Ctrl+qeen tekencode verzenden, maar door op Ctrl+qte drukken en vervolgens op Enterte drukken, kan dit natuurlijker zijn dan Ctrl+qen dan Ctrl+j.

Een andere optie is om (te typen en vervolgens Enter, te schrijven en daarna de (te verwijderen. Deze oplossing is vergelijkbaar met die waarbij u om ;\te typen om te zeggen dat de instructie niet is voltooid.


Antwoord 8

Beetje laat op het feest! Maar ik merkte dat veel mensen het hebben over het gebruik van Ctrl-combinaties om extra regels toe te voegen. Dit werkte niet voor mij totdat ik een opmerking zag dat het de Emacs-binding was. Ik heb mijn inline-editor ingesteld op Vi, als je dat ook hebt gedaan, druk dan op Escom naar de “Normale” modus te gaan op de regel voordat je een extra regel wilt toevoegen en druk vervolgens op O(of Oals je achter de regel staat). Net als in normaal Vi(m). Werkt voor mij!

Other episodes