• Home
  • Shell
    • Emacs
    • Perl
    • screen
    • sed
  • Ubuntu
    • VNC
  • Web Development
    • Javascript
    • Joomla
    • MySQL
    • osTicket
  • Windows
    • Gimp

Posts tagged up

BASH> Fix vi arrow keys in insert mode

Mar28
2013
Written by Scott Rowley

Full credit to Michael S. Kirkpatrick

The following fix saved my sanity

I prefer using vi as my text editor, because it is clean and simple. I don’t have to go searching for commands from drop-down boxes and other GUI crap. But arrow keys and backspace are sometimes problematic, depending on the OS you’re using. In my case, I frequently ssh from Linux to SunOS, and the SunOS vi doesn’t like my keyboard mappings.

Here is my (partial) solution. Open ~/.exrc and add the following lines. In case it is not obvious, do not type the letters inside brackets, but press those keys instead (i.e., [ctrl-v] means you hold the Ctrl key while pressing v).

— Michael S. Kirkpatrick

:map! [ctrl-v][backspace] [ctrl-v][esc]xa
:map! [ctrl-v][up-arrow] [ctrl-v][esc]ka
:map! [ctrl-v][down-arrow] [ctrl-v][esc]ja
:map! [ctrl-v][right-arrow] [ctrl-v][esc]la
:map! [ctrl-v][left-arrow] [ctrl-v][esc]ha

When you type these in (assuming you’re using vi or vim, these lines will look like this.

:map! ^? ^[xa
:map! ^[OA ^[ka
:map! ^[OB ^[ja
:map! ^[OC ^[ha
:map! ^[OD ^[la
Posted in BASH - Tagged arrow, backspace, control, ctrl, down, editor, esc, escape, exrc, fix, key, keys, left, map, Michael S. Kirkpatrick, right, vi, vim

BASH> Functions

Mar22
2013
Written by Scott Rowley

The beginning of a list of any functions I have created or found and deem useful:

This function will allow you to type “up ANY_NUMBER” and move that many directories up in the current directory tree you are in. If you you do not specify a number and instead just type ‘up’ by itself you will automatically go up just one directory.

function up ()
{
if (( $#> 0 )); then
COUNTER=$1;
else
COUNTER=1;
fi;
while (( ${COUNTER}> 0 )); do
UP="${UP}../";
(( COUNTER=${COUNTER}-1 ));
done;
echo "cd $UP";
cd $UP;
UP=''
}

Some servers don’t have ‘watch’ installed so I’ve made my own function to replicate it’s basic functionality (updated to work with pipes!)

function mywatch () {
while true
do
clear
date +'%D %r'
echo ''
cmd=`echo $@`
#echo "Command is '$cmd'"
last=`echo $@ | awk {'print $NF'}`
num='^[0-9]+$'
if [[ $last =~ $num ]]; then
cmd=`echo $cmd | sed "s^$last^^g"`
eval "$cmd"
sleep $last
else
eval "$cmd"
sleep 2
fi
clear
done
}

Useage:

mywatch "ls -al" 5

If a second parameter ($2) is not supplied (in this case 5) then 2 will be used and your watch will refresh every 2 seconds.

Easily locate problem directories when space is low on a server. Add the following function to your profile (.profile / .bashrc / etc)

function spaceHog ()
{
du -k | sort -n | awk '
BEGIN {
split("KB,MB,GB,TB", Units, ",");
}
{
u = 1;
while ($1>= 1024) {
$1 = $1 / 1024;
u += 1;
}
$1 = sprintf("%.1f %s", $1, Units[u]);
print $0;
}'
}

Useage:

[17:25:51][user@server][ ~ ]
[$]> spaceHog | tail -10 # To show the 10 largest, change this number as desired.
247.5 MB ./bin
247.8 MB ./.cache/google-chrome/Default
247.8 MB ./.cache/google-chrome
283.4 MB ./.cache
293.2 MB ./.wine/drive_c/Program Files (x86)
423.5 MB ./Downloads
653.6 MB ./IOS_APPS
655.1 MB ./.wine/drive_c
658.2 MB ./.wine
2.7 GB .

Delete (rm) a file by it’s inode number

Occassionally I will (or others will) run a command that ends up accidentally creating some goofy named files such as ‘?[01’. This is actually a character so you can’t just type it in to delete it. For this you can lookup the file name by it’s inode and then delete it.

You can do an ls with an -i option to get the inodes, for example:

[$]> ls -ali
total 8
295188 drwxr-xr-x 2 sasowner sas 4096 Dec 30 11:26 .
295064 drwx------ 23 sasowner sas 4096 Dec 30 11:26 ..
295406 -rw-r--r-- 1 sasowner sas 0 Dec 30 11:26 file1
295407 -rw-r--r-- 1 sasowner sas 0 Dec 30 11:26 file2
295408 -rw-r--r-- 1 sasowner sas 0 Dec 30 11:26 file3
295409 -rw-r--r-- 1 sasowner sas 0 Dec 30 11:26 file4

You could then follow this up with a command such as:

[$]> find . -inum 295409 -exec rm {} \;

However, you probably won’t use this command often enough to remember it unless you are regularly familiar with the find command. Instead, I’ve create the following simple function:

function rmi ()
{
find . -inum $1 -exec rm -i {} \;
}

Then simply type the following after getting the inode of the file

[$]> rmi ######
Posted in BASH, Ubuntu - Tagged alias, bash_profile, bashrc, cd, clear, COUNTER, date, directory, function, monitor, move, navigate, profile, sleep, watch

Corrections? Questions? Comments?

Find an error?
Everything work out great for you?
Have some feedback?
Like to see something added to the article?

PLEASE leave us a comment after the article and let us know how we are doing, or if something needs corrected, improved or clarified.

Thank you!
- The Management

Advertisement

Sudo Bash
By Geeks - For Geeks

Back to Top