# Sam Cheat Sheet from 9fans

Thread: `[9fans] Revised sam cheat sheat`

By: `revcomninos`

## CHEAT SHEET OF SAM COMMANDS

x cmd - set dot and run command on each matching line

. -- apply command to dot

, -- apply command to whole document


< replace dot with std input of command

! run the unix command

> send dot to std input of command


0<date -- insert date

>spell -- check spelling

>wc -l -- count just the lines

>wc -- do a line, word and character count


|tr a-z A-Z -- change case

,x/".+"/ y/"/ | tr [:lower:] [:upper:]

OR

,x/".+"/ y/"/ | tr a-z A-Z

-- to capitalise all letters inside quotes


s/.*/*&*/ -- enclose phrase in asterisks


|fold -s -- break up/format long lines

|fmt -- idem

|sort -- sort the file

|uniq -- delete juxtaposed duplicate lines

|awk '!seen[$0]++' -- delete non-juxtaposed duplicate lines

,x/\n+/a/\n/ -- finds every occurrence of 1 or more (+) newlines (\n) and appends
a new line.


/vi/ or +/vi/ -- search forward

0/regex/ -- search from beg. of file forwards

0/regex/+-p -- search for a string and select the whole line that contains it

/vi/+- m 0 selects and moves the next line containing "vi" to the top of the file

/vi/+- t 0 selects and copies the next line with "vi" to the top of the file


$/regex/ -- search from end of the file backwards


Search for a string, and then go from search results in sam window to document:

,x g/hello/{

p

=

}


0,$ t "peter.c" 0 -- copy contents of one to another


, and ; selects whole document

, equivalent to 0,$

0;5 and 0,5 - selects 1st five lines


-/^/+#10 -- go to 10th column of current line


B < echo *.org -- One can load multiple files by using <

B < grep -l vi * will load only those files that contain the string "vi"

D is the complement of B. It eradicates the file from sam's memory but does not
delete the file from disk! Without a name argument removes current file

e replaces current file with one specified

f changes the filename

f <nl? -- set the current filename to null

n gives a list of read and loaded files


{} Braces group commands

[ˆn] any char but n

[nm] n or m


w writes the whole file, or parts of a file to disk

< cat /home/red/bin/songs -- insert contents of a file

r /home/red/bin/songs -- idem

r replaces dot in the current file with the contents of the file specified


< /home/red/bin/songs -- insert contents of a script

> /home/red/bin/pass google -- output contents of script to sam window


< echo "Hello world" -- insert ascii code at the current position


x/^/a/ / -- indent the selected text by 1 tab. x means apply to all lines in the
selection.


sam terminal information

-----------------------

. indicates the current file

+ the file has a window open

- the file has been read by sam

* the file is open in more than one instance

' the loaded file differs from the file on disk


/.+\n/ -- finds lines with text

/.*\n/ -- matches single whole lines


0/Ben/,/Son/ -- find a range of text

.,/regexp/ -- selects text FROM dot to the regex

./regexp// -- selects the second occurrence of a regex

./regexp// -- selects the third occurrence of a regex

/vi/+/vi/ -- search for the second occurrence of "vi" following dot


p -- prints contents of dot in sam terminal

= -- prints current value of dot in sam terminal


,t "junk" 0 -- copy current file to start of file "junk"


Perform conditional ACTIONS on lines:

g/regexp/ command -- g = if. If dot contains regexp, run command

g/test/d

,x g/vi/p -- if a line has "vi" print the line in sam window

v/regexp/ command -- If dot does not contain, run a command

,x/.*\n/ g/ed/ v/red/ p -- find lines with ed but not red

,x/".+"/ y/"/ -- search for text in quotes but do not show lines with "y"

,x/".+"/ x/"/ -- search for text between quotes and only show the quotes

,x /.*\n/ g/vi/ p - break file into lines, if lines contain "vi, print


,x/ +$/d -- delete empty whitespace at end of every line

,x/'+$/i/ --color-auto/ -- insert the phrase "--color-auto" into every line that
ends in 1 or more '


.x/Peter/d -- search dot for 'Peter' and delete 'Peter'

,x/\\v|\\c|\\s1|\\q1/d -- multiple deletions

,x/\*/d -- delete all asterisks

,x/^ /d -- delete the indents

,x/^ +/d -- delete all blank spaces at beginning of lines

,x/^$\n/d -- delete all blank lines

,x/\n\n\n+/c/\n -- change multiple blank lines into 1 blank line


,x/[0-9]/d -- delete lines with numbers


,x/^http.[^,]*?/d -- search for "http...," and delete


C-i -- create a tab stop of 8 spaces

,x/^/a/ / -- indents text with a tab stop.

x/^ /d -- remove 1 tab of indent from selection


,x/[‘‘’’“”‘’]/c/" -- change all smart quotes into straight ones

,x/".+"/ x/"/ c/'/ -- change double quotes (that surround one or more characters)
to single quotes

,x/good/ c/bad/ -- change "good" to "bad" on every line

,x/teh/c/the/

,x/Emacs/x/E/c/e/ - change all the capital "E"s in "Emacs" to lower case "e"s


X -- is an iterator that works on files not lines

X D -- remove out all up to date files

X/regexp/ command -- Run command on files whose menu line matches

X/questions/D -- close file called "questions"

X/\.sam$/,x/the/+-p -- search multiple files for text and print the results

X/.*/,x/<cr>/d -- strip <cr> from all files

X ,x/(.+\n)+/ g/account/+-p -- look through every file, and every line, and if any
line contains "account" print it out in sam window


s/.*/& Hello/ -- add " Hello" to the end of line

s/good/bad/


The y command *excludes from consideration* in the seach that follows.


,y/ben/ x/(.+\n)+/g/Directory details/p


Y/regexp/ command -- Exclude the file named by "regex" from consideration.


.x g/fred/ v/........./ c/jim/ -- Look through dot. If dot contains "fred" change
it to "jim" provided it is not "fred....."


,x[a-zA-Z]+/{

g/fred/ v/...../ c/jim/

g/jim/ v/..../ c/fred/

}


In the above command braces {} allow for multiple commands. The command says:
search every line that contains 1 or more letters, if the line contains "fred"
change it to "jim" and if "jim" change it to fred, provided "fred" is not "fred."
and "jim" not "jim."


g - "if"

v" - "if not, unless the regex is"


,| ssam -f your_script -- apply a sam script