Nano Text Editor: Complete Guide and Reference
Table of Contents
1. [Introduction](#introduction) 2. [Installation](#installation) 3. [Basic Usage](#basic-usage) 4. [Command Line Options](#command-line-options) 5. [Navigation Commands](#navigation-commands) 6. [Editing Commands](#editing-commands) 7. [File Operations](#file-operations) 8. [Search and Replace](#search-and-replace) 9. [Advanced Features](#advanced-features) 10. [Configuration](#configuration) 11. [Practical Examples](#practical-examples) 12. [Troubleshooting](#troubleshooting)Introduction
Nano is a simple, user-friendly command-line text editor that serves as an excellent alternative to more complex editors like Vim or Emacs. Originally created as a free replacement for the Pico text editor, nano provides an intuitive interface with helpful on-screen shortcuts, making it ideal for beginners and experienced users alike.
Key Features
- Intuitive Interface: On-screen help with keyboard shortcuts - Syntax Highlighting: Support for multiple programming languages - Search and Replace: Powerful text searching capabilities - Multi-file Support: Edit multiple files simultaneously - Undo/Redo: Full undo and redo functionality - Auto-indentation: Automatic code indentation - Line Numbers: Display line and column numbers - Spell Checking: Built-in spell checker integration
Why Choose Nano
| Aspect | Nano | Vim | Emacs | |--------|------|-----|-------| | Learning Curve | Easy | Steep | Moderate | | Memory Usage | Low | Low | High | | Features | Basic-Intermediate | Advanced | Advanced | | Configuration | Simple | Complex | Complex | | Availability | Universal | Universal | Common |
Installation
Linux Distributions
Most Linux distributions include nano by default. If not installed:
#### Ubuntu/Debian
`bash
sudo apt update
sudo apt install nano
`
#### CentOS/RHEL/Fedora
`bash
CentOS/RHEL
sudo yum install nanoor
sudo dnf install nanoFedora
sudo dnf install nano`#### Arch Linux
`bash
sudo pacman -S nano
`
macOS
Nano comes pre-installed on macOS. To update to the latest version:
`bash
Using Homebrew
brew install nanoUsing MacPorts
sudo port install nano`Windows
#### Windows Subsystem for Linux (WSL)
`bash
sudo apt install nano
`
#### Git Bash Nano is included with Git for Windows.
Verification
Check installation and version:
`bash
nano --version
`
Basic Usage
Starting Nano
#### Basic Syntax
`bash
nano [options] [filename]
`
#### Common Usage Examples
`bash
Create new file or edit existing
nano myfile.txtEdit with line numbers
nano -l myfile.txtEdit with syntax highlighting
nano -Y python script.pyOpen file at specific line
nano +25 myfile.txt`Interface Overview
When you open nano, you'll see:
1. Title Bar: Shows nano version and filename 2. Edit Area: Main text editing space 3. Status Line: Current line/column position 4. Help Area: Bottom two lines showing shortcuts
Basic Controls
| Key Combination | Function | |----------------|----------| | Ctrl + X | Exit nano | | Ctrl + O | Save file (WriteOut) | | Ctrl + R | Read file (Insert file) | | Ctrl + W | Search (Where is) | | Ctrl + \ | Search and replace | | Ctrl + K | Cut line | | Ctrl + U | Paste (Uncut) | | Ctrl + G | Help |
Command Line Options
Complete Options Table
| Option | Long Form | Description | |--------|-----------|-------------| | -A | --smarthome | Make Home key smarter | | -B | --backup | Create backup files | | -C | --backupdir=DIR | Directory for backup files | | -D | --boldtext | Use bold text instead of reverse | | -E | --tabstospaces | Convert tabs to spaces | | -F | --multibuffer | Enable multiple file buffers | | -G | --locking | Use vim-style file locking | | -H | --historylog | Log search/replace history | | -I | --ignorercfiles | Don't read nanorc files | | -J | --guidestripe=NUM | Show guide stripe at column | | -K | --rawsequences | Fix keypad/numeric keypad | | -L | --nonewlines | Don't add newlines to file ends | | -M | --trimblanks | Trim trailing whitespace | | -N | --noconvert | Don't convert from DOS/Mac format | | -O | --morespace | Use one more line for editing | | -P | --positionlog | Log cursor position | | -Q | --quotestr=STRING | Quoting string for email | | -R | --restricted | Restricted mode | | -S | --smooth | Smooth scrolling | | -T | --tabsize=NUM | Set tab size | | -U | --quickblank | Quick status bar blanking | | -V | --version | Show version information | | -W | --wordbounds | Detect word boundaries | | -X | --nohelp | Don't show help lines | | -Y | --syntax=NAME | Syntax highlighting type | | -Z | --zap | Let Backspace and Delete erase | | -a | --atblanks | Wrap lines at whitespace | | -b | --breaklonglines | Hard-wrap overlong lines | | -c | --constantshow | Show cursor position constantly | | -d | --rebinddelete | Fix Backspace/Delete confusion | | -e | --emptyline | Keep line below title bar empty | | -f | --rcfile=FILE | Use only specified nanorc file | | -g | --showcursor | Show cursor in file browser | | -h | --help | Show help message | | -i | --autoindent | Indent new lines automatically | | -j | --jumpyscrolling | Scroll by half-screens | | -k | --cutfromcursor | Cut from cursor to line end | | -l | --linenumbers | Show line numbers | | -m | --mouse | Enable mouse support | | -n | --noread | Do not read file | | -o | --operatingdir=DIR | Set operating directory | | -p | --preserve | Preserve XON/XOFF keys | | -q | --indicator | Show scrolling indicator | | -r | --fill=NUM | Set wrap width | | -s | --speller=PROG | Use alternative spell checker | | -t | --tempfile | Auto-save on exit | | -u | --unix | Save file in Unix format | | -v | --view | View mode (read-only) | | -w | --nowrap | Don't hard-wrap long lines | | -x | --nohelp | Don't show help lines | | -y | --afterends | Make Ctrl+Right stop at word ends | | -$ | --softwrap | Enable soft line wrapping |
Practical Command Examples
`bash
Edit with line numbers and auto-indent
nano -li config.pyEdit multiple files with syntax highlighting
nano -F -Y python file1.py file2.pyEdit with backup creation
nano -B important_file.txtRead-only mode for viewing
nano -v logfile.txtSet tab size to 4 and show line numbers
nano -T 4 -l script.shEnable mouse support and soft wrapping
nano -m -$ document.txt`Navigation Commands
Cursor Movement
| Command | Function | |---------|----------| | Arrow Keys | Move cursor in respective direction | | Ctrl + A | Move to beginning of line | | Ctrl + E | Move to end of line | | Ctrl + Y | Move up one page | | Ctrl + V | Move down one page | | Alt + \ | Move to beginning of file | | Alt + / | Move to end of file | | Ctrl + _ | Go to specific line number | | Alt + G | Go to specific line number | | Ctrl + Space | Move forward one word | | Alt + Space | Move backward one word |
Advanced Navigation
`bash
Go to line 50
Ctrl + _ (then type 50)Go to line 25, column 10
Ctrl + _ (then type 25,10)Jump to matching bracket
Alt + ]`Page Navigation
| Command | Function | |---------|----------| | Page Up | Move up one screen | | Page Down | Move down one screen | | Ctrl + Y | Previous page | | Ctrl + V | Next page | | Alt + \ | First line of file | | Alt + / | Last line of file |
Editing Commands
Text Selection and Manipulation
| Command | Function | |---------|----------| | Alt + A | Start/stop text selection | | Ctrl + K | Cut current line or selection | | Ctrl + U | Paste (uncut) text | | Alt + 6 | Copy current line or selection | | Ctrl + ] | Complete current word | | Alt + 3 | Comment/uncomment line | | Alt + U | Undo last operation | | Alt + E | Redo last undone operation |
Text Transformation
| Command | Function | |---------|----------| | Alt + ^ | Copy current line to clipboard | | Ctrl + T | Execute spell checker | | Ctrl + J | Justify current paragraph | | Alt + J | Justify entire file | | Alt + D | Count words, lines, characters | | Alt + T | Cut from cursor to end of file |
Indentation and Formatting
`bash
Auto-indent (when enabled with -i)
New lines automatically match previous line indentation
Manual indentation
Alt + } # Indent current line Alt + { # Unindent current lineTab conversion (when -E option used)
Tabs automatically converted to spaces
`File Operations
Opening and Creating Files
`bash
Open existing file
nano filename.txtCreate new file
nano newfile.txtOpen multiple files
nano file1.txt file2.txt file3.txtOpen file at specific line
nano +50 largefile.txt`Saving Files
| Command | Function | |---------|----------| | Ctrl + O | Save file (WriteOut) | | Ctrl + X | Exit (prompts to save if modified) |
#### Save Process 1. Press Ctrl + O 2. Confirm filename (or change it) 3. Press Enter to save
File Buffer Management
When multiple files are open:
| Command | Function | |---------|----------| | Alt + < | Switch to previous file | | Alt + > | Switch to next file | | Ctrl + R | Insert another file |
Reading and Inserting Files
`bash
Insert file at cursor position
Ctrl + RThen type filename and press Enter
Insert command output
Ctrl + R Ctrl + XThen type command and press Enter
`Backup Configuration
`bash
Create backups automatically
nano -B filename.txtSpecify backup directory
nano -C /path/to/backup/dir filename.txt`Search and Replace
Basic Search
| Command | Function | |---------|----------| | Ctrl + W | Search forward | | Alt + W | Search backward | | Alt + Q | Find next occurrence | | Alt + P | Find previous occurrence |
Search Options
During search, you can toggle:
| Key | Option | |-----|--------| | Alt + C | Case sensitive search | | Alt + B | Backward search | | Alt + R | Regular expression search |
Replace Operations
`bash
Basic replace
Ctrl + \Replace process:
1. Enter search term
2. Enter replacement term
3. Choose: Y (yes), N (no), A (all), Ctrl+C (cancel)
`Advanced Search Examples
#### Regular Expression Search
`bash
Enable regex mode (Alt + R during search)
Search patterns:
^line_start # Lines starting with "line_start" end_line$ # Lines ending with "end_line" [0-9]+ # One or more digits \b\w{5}\b # Exactly 5-letter words`#### Case-Insensitive Search
`bash
During search, press Alt + C to toggle case sensitivity
Default is case-insensitive
`Advanced Features
Syntax Highlighting
Nano supports syntax highlighting for many file types:
#### Supported Languages - C/C++ - Python - JavaScript - HTML/XML - CSS - Shell scripts - Perl - Ruby - Java - PHP - And many more
#### Enabling Syntax Highlighting
`bash
Automatic detection
nano program.pyManual specification
nano -Y python script_without_extensionAvailable syntaxes
nano -T help`Multi-Buffer Editing
`bash
Enable multi-buffer mode
nano -F file1.txt file2.txtOr open additional files while editing
Ctrl + R Ctrl + TThen select file from browser
`Mouse Support
`bash
Enable mouse support
nano -m filename.txtMouse functions:
- Click to position cursor
- Double-click to select word
- Triple-click to select line
- Scroll wheel for page navigation
`Spell Checking
`bash
Built-in spell checker
Ctrl + TCustom spell checker
nano -s aspell filename.txt`Line Numbering and Position
`bash
Show line numbers
nano -l filename.txtShow cursor position constantly
nano -c filename.txtGo to specific line
Ctrl + _Then enter line number
`Configuration
Global Configuration
System-wide configuration file: /etc/nanorc
User Configuration
User-specific configuration: ~/.nanorc
#### Sample .nanorc Configuration
`bash
Enable line numbers
set linenumbersEnable mouse support
set mouseSet tab size to 4
set tabsize 4Convert tabs to spaces
set tabstospacesEnable auto-indentation
set autoindentEnable soft line wrapping
set softwrapShow cursor position
set constantshowEnable syntax highlighting
include "/usr/share/nano/*.nanorc"Custom key bindings
bind ^S savefile main bind ^Q exit allSet backup directory
set backup set backupdir "~/.nano/backups"Enable undo
set undoSmooth scrolling
set smoothRemove trailing whitespace
set trimblanks`Color Customization
`bash
Custom syntax highlighting
syntax "myconfig" "\.(conf|config)$" color brightred "^[[:space:]][^=]=" color brightblue "=.*$" color green "^[[:space:]]#.$"`Key Binding Customization
`bash
Bind Ctrl+S to save
bind ^S savefile mainBind F1 to help
bind F1 help allUnbind a key
unbind ^K main`Practical Examples
Example 1: Editing Configuration Files
`bash
Edit system configuration with backup
sudo nano -B /etc/ssh/sshd_configProcess:
1. Make changes carefully
2. Save with Ctrl + O
3. Exit with Ctrl + X
4. Restart service if needed
`Example 2: Programming Workflow
`bash
Open Python file with optimal settings
nano -liT 4 -Y python script.pyFeatures used:
-l: Line numbers
-i: Auto-indent
-T 4: Tab size 4
-Y python: Python syntax highlighting
`Example 3: Log File Analysis
`bash
View large log file
nano -v +1000 /var/log/syslogNavigation:
+1000: Start at line 1000
-v: View mode (read-only)
Use Ctrl + W to search for errors
`Example 4: Multiple File Editing
`bash
Edit related files simultaneously
nano -F header.h source.c makefileSwitch between files:
Alt + < : Previous file
Alt + > : Next file
`Example 5: Collaborative Editing Setup
`bash
Create backup and enable locking
nano -BG shared_document.txtFeatures:
-B: Create backups
-G: File locking (prevents conflicts)
`Troubleshooting
Common Issues and Solutions
#### Issue 1: Nano Not Found
`bash
Check if nano is installed
which nanoInstall if missing (Ubuntu/Debian)
sudo apt install nano`#### Issue 2: Syntax Highlighting Not Working
`bash
Check available syntaxes
ls /usr/share/nano/Force syntax highlighting
nano -Y c program.txtAdd to .nanorc
include "/usr/share/nano/*.nanorc"`#### Issue 3: Backup Files Not Created
`bash
Enable backups explicitly
nano -B filename.txtOr add to .nanorc
set backup set backupdir "~/.nano_backups" mkdir -p ~/.nano_backups`#### Issue 4: Key Bindings Not Working
`bash
Check terminal compatibility
echo $TERMTry alternative key combinations
If Ctrl+X doesn't work, try Alt+X or F2
`#### Issue 5: Large File Performance
`bash
For large files, disable features that slow down editing
nano -x -w largefile.txtOptions used:
-x: No help lines
-w: No line wrapping
`Performance Optimization
| File Size | Recommended Options |
|-----------|-------------------|
| < 1MB | All features enabled |
| 1-10MB | nano -w filename |
| 10-100MB | nano -xw filename |
| > 100MB | Consider alternative tools |
Recovery Procedures
#### Recovering Unsaved Changes
`bash
Nano creates emergency saves in /tmp
ls /tmp/nano.*Recovery process:
1. Find the emergency file
2. Copy to desired location
3. Rename appropriately
`#### Dealing with Corrupted Files
`bash
Create backup before editing
cp original.txt original.txt.backupEdit with backup enabled
nano -B original.txt`Environment Variables
| Variable | Purpose | |----------|---------| | EDITOR | Default editor for system | | NANO_BACKUP_DIR | Default backup directory | | SPELL | Default spell checker |
`bash
Set nano as default editor
export EDITOR=nanoSet custom backup directory
export NANO_BACKUP_DIR="$HOME/.backups"`This comprehensive guide covers all aspects of using nano text editor effectively. From basic operations to advanced configuration, these examples and explanations should provide everything needed to master nano for daily text editing tasks. The editor's simplicity combined with its powerful features makes it an excellent choice for both beginners and experienced users who prefer straightforward, efficient text editing.