Go to previous command without scrolling through multiline commands in iPython - ipython

I have the current newest version of iPython (7.6.1) and when I try to use the up-arrow keys to get to previous commands, when I hit a multiline command, the up-arrow instead slowly goes up through each line instead of going to the previous command. To get to the command before the multiline command, I have to scroll all the way up to the top of the multiline command before I can get to the previous command. Is there another shortcut I can use to skip the multiline command and get the previous one?

At least on a Linux machine, PgUp/PgDn appears to do the trick.
If search for a particular item, partial entry followed by up/dn is nice. For example to find a previous function definition I might do
def^p
The ? help also suggests Ctrl + R for a history search. I haven't used that.
The ipython shortcuts section refers to me to prompt_toolkit, but that gives info on setting things up, not on current options.
In Macbook, you can use:
Fn + Shift + ↑ to go up
Fn + Shift + ↓ to do down

Related

Cursor not in right location and can go beyond $ sign in VSCode terminal

I connect to remote host in VSCode. Then let' say I type the following command in VSCode terminal
sh ./environment/activate_python_jupyter.sh
and then I realize that I should use the pyspark one instead of the python one, so I use up arrow to find the above command, and use left/right arrows to locate my cursor to modify thon to spark. The modified command looks like this before I hit enter
sh ./environment/activate_pyspark_jupyter.sh
However, after I hit the enter I find out that the modified command is not the one I see before (checked by up arrow), it might be something like this
sh ./environment/actispark_python_jupyter.sh
I try several times and each time the modified command looks good/turns to a different and wrong one before/after I hit enter. I finally realize that it is because the cursor was actually not located in the right place when I modified the command, although it looked good before I hit enter.
More interestingly, my cursor can go beyond the $ (dollar sign) when I use up arrow to find a command and move the cursor using the left arrow. 
This looks like a cursor location bug. Have someone met with such issue and happen to know a solution?

Powershell 7.3.0 Tab completion not working

I've recently upgraded PowerShell to version 7.3.0 version and now, when I type a command, I see its suggestions like when I'm typing pip it adds list like in this image. Or when I type start of the command it suggests its full name.
The problem is that when I press Tab it doesn't complete the command, instead it just starts listing current directories, i.e. here is an image after pressing Tab once.
Also even when I start typing the full name of the command like pip li it still shows the ending, but when pressing Tab it just does nothing.
I expected this to complete the current command with the suggestion after Tab is pressed.
I've tried to google this problem but haven't found the exact same case I have with 7.3.0 version.
Just press -> (right arrow) key
If you want to change key bindings:
source: https://devblogs.microsoft.com/powershell/announcing-psreadline-2-1-with-predictive-intellisense/
Key Bindings for Predictions
Key bindings control cursor movement and additional features within the prediction. To support users running Predictive IntelliSense on multiple platforms, key bindings are user-settable from the command line or your profile script.
PSReadLine contains functions to navigate and accept predictions. As an example, to accept a displayed prediction, PSReadLine contains functions:
AcceptSuggestion – Accept the current inline suggestion
AcceptNextSuggestionWord – Accept the next word of the inline suggestion
AcceptSuggestion is built within ForwardChar, which by default is bound to RightArrow. Pressing RightArrow accepts an inline suggestion when the cursor is at the end of the current line.
AcceptNextSuggestionWord is built within the function ForwardWord, which can be bound with Ctrl+f by Set-PSReadLineKeyHandler -Chord "Ctrl+f" -Function ForwardWord. Pressing Ctrl+f accepts the next word of an inline suggestion when the cursor is at the end of current editing line.
As a user, you can bound other keys to AcceptSuggestion and AcceptNextSuggestionWord for similar functionalities. Search for ForwardCharAndAcceptNextSuggestionWord in SamplePSReadLineProfile.ps1 for an example to make RightArrow accept the next word from inline suggestion, instead of the whole suggestion line.
List of additional suggested key bindings defined in PSReadLine SamplePSReadLineProfile.ps1

Complete command from history in ipython

For reasons outside of my control I'm stuck using python 2.6.6 and IPython 0.10.2. I also normally use the tcsh shell, and have gotten quite used to completing a command from the history using <A-p> (i.e. pressing the ALT key and p). However, this doesn't work in IPython. I know I can press <C-r> and then start typing a command, but what inevitably is happening is that I start a command, press <A-p>, get a colon indicating some weird state, then exit out of that state, delete my command, press <C-r> then search for my command. It's getting rather irritating. Is there any way to make <A-p> complete my already started command by relying on the history?
Ouch, this is an old version of IPython, Python (and pip). The bad news is I don't have much experience with such an old version of IPython, the good new is; it was way simpler at that time.
Most of the shortcut and feature are provided using readline, and the python bindings of stdlib. Meaning that most likely what you are trying to configure is readline itself and not only IPython; so you can find more information on that outside of IPython !
The secret is to grep in the source-code for parse_and_bind, then you'll find the following example configuration, leading me to change the ~/.ipython/ipy_user_conf.py to be like so at around line 99 (all indented an extra 4 space to be in the main() function):
import readline
readline.parse_and_bind('set completion-query-items 1000')
readline.parse_and_bind('set page-completions no')
rlopts = """\
tab: complete
"\C-l": possible-completions
set show-all-if-ambiguous on
"\C-o": tab-insert
"\M-i": " "
"\M-o": "\d\d\d\d"
"\M-I": "\d\d\d\d"
"\C-r": reverse-search-history
"\C-s": forward-search-history
"\C-p": history-search-backward
"\C-n": history-search-forward
"\e[A": history-search-backward
"\e[B": history-search-forward
"\C-k": kill-line
"\C-u": unix-line-discard"""
for cmd in rlopts.split('\n'):
readline.parse_and_bind(cmd)
The repetition of commands make me think that what \C,\M or [e mean might be system dependant. I would bet on \C being Control, and \M being Meta (Alt, Opt), but at least one of these line did the trick for me (and also now tab allows to complete). See also man readline for the list of commands you can bind to what, and enjoy! Hoping you can upgrade to Python 3 and IPython 6 at some point.
[Edit]
See Eric Carlsen second comment under this answer for how it was resolved.

vi command line editing key bindings - previous command

I use the vi editor on the command line, and I really like it.
I use
set -o vi
to set the bindings.
The only thing is that I have to use the up and down arrows to cycle through the
previous executed commands.
In the emacs key bindings it was Ctrl+p to get to the previous command. It is the one emacs binding I miss.
I have been looking for something like it vi - but can't find it. My search gets diverted to the text editing vi binding for previous command which is held in " : " or hitting Ctrl+F to get a command window. I am using vi on the command line instead of emacs. There has to be something.
Is there something comparable in the vi command line ?
Using the Up / Down arrow keys is driving me nuts.
Actually I found the answer on this on this site:
Working Productively in Bash's Vi Command Line Editing Mode (with Cheat Sheet)
Make sure set -o vi is set to 'on'. Hit Ctrl+[ or escape to get to command mode. Then tap k go up the history and j to go down. It is so intuitive that I imagine most vi power-users discover it without trying, without help.
Thanks.

How to clear console in MongoDB

While using Mongodb console or shell sometimes my screen is cluttered with a lot of previous output which I do not need. So, is there a function to clear console in MongoDB?
Something like an analog of clear in MatLab.
I have tried clc, clear but with no success.
Judging by Jira they have done it: You need to write cls in the shell.
You can also use a hotkey: CTRL + L.
In macOS: Command + K.
Check more hotkeys for the shell here.
If you are using MongoDB 2.0 or higher, the mongo shell supports both:
cls command
Ctrl+l (clear screen)
Note that both of these clear the screen and put the cursor at the top .. but you can still scrollback to see previous history.
In OS X Terminal.app you can also do:
Command+K (clear scrollback)
Clearing the screen and/or scrollback buffer are independent of the history, so you can still cursor up/down to run previous commands.