Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vi keybindings for R command line like in Bash

Context

I like editing and manipulating the bash command line using vi-style key bindings with the following setting:

set -o vi

However, when I start R on the command-line, these keybindings disappear. I know that the Vim-R plugin allows for Vim keybindings when you run R through the Conque Shell, but I'm not entirely happy with that experience, and, regardless, sometimes I just want to run R on the standard command-line.

Question

  • Is there any way of getting Vi style key bindings in R on the command line?
like image 320
Jeromy Anglim Avatar asked Jun 04 '11 05:06

Jeromy Anglim


2 Answers

Thank you to Joshua Ulrich and progo's answers, which helped to get me started.

Below I record my experience:

Initial setup

I tried set keymap vi and set editing-mode vi. When I started R in my Gnome Terminal, some shortcuts worked and others did not. In particular cc, and dd (i.e., delete lines) did not work at all, and cw and dw performed the action of deleting words but did not update the display until I pressed an additional key, which is not a functional experience.

Replacing missing functionality

  • I found this inputrc file that gave me a few ideas.
  • The help page was helpful, naturally.

I added the following to ~/.inputrc, which fixed the obvious problems mentioned above:

set completion-ignore-case on

set editing-mode vi

$if mode=vi
    set keymap vi-insert
    "\C-l": clear-screen
    "\C-p": history-search-backward
    "\C-n": history-search-forward
    # alt dot cycles through last argument
    "\e.":yank-last-arg

    set keymap vi-command
    "D":kill-line
    "dw": kill-word
    "dd": kill-whole-line
    "db": backward-kill-word
    "cc": "ddi"
    "cw": "dwi"
    "cb": "dbi"
    "diw": "lbdw"
    "yiw": "lbyw"
    "ciw": "lbcw"
    "diW": "lBdW"
    "yiW": "lByW"
    "ciW": "lBcW"
    "gg": beginning-of-history
    "G": end-of-history
$endif
like image 197
Jeromy Anglim Avatar answered Sep 30 '22 01:09

Jeromy Anglim


Add this to your .inputrc:

set editing-mode vi
like image 31
Joshua Ulrich Avatar answered Sep 30 '22 01:09

Joshua Ulrich