Trending-skills sheets-terminal-spreadsheet
Terminal-based spreadsheet TUI tool written in Go for editing CSV files in the terminal with vim-like keybindings
git clone https://github.com/Aradotso/trending-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/Aradotso/trending-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/sheets-terminal-spreadsheet" ~/.claude/skills/aradotso-trending-skills-sheets-terminal-spreadsheet && rm -rf "$T"
skills/sheets-terminal-spreadsheet/SKILL.mdSheets Terminal Spreadsheet
Skill by ara.so — Daily 2026 Skills collection.
Sheets is a terminal-based spreadsheet TUI (Terminal User Interface) for viewing and editing CSV files directly in your terminal. It features vim-style navigation, formula support, visual selection, search, undo/redo, and a command mode — all without leaving the terminal.
Installation
Using Go
go install github.com/maaslalani/sheets@main
Download Binary
Download a prebuilt binary from GitHub Releases.
Verify Installation
sheets --help
CLI Usage
Launch the TUI
sheets budget.csv
Read from stdin
sheets <<< "ID,Name,Age 1,Alice,24 2,Bob,32 3,Charlie,26"
Or pipe from another command:
cat data.csv | sheets
Read a Specific Cell
sheets budget.csv B9 # Output: 2760
Read a Cell Range
sheets budget.csv B1:B3 # Output: # 1200 # 950 # 810
Modify Cells (Non-Interactive)
# Set one cell sheets budget.csv B7=10 # Set multiple cells sheets budget.csv B7=10 B8=20
Navigation Keybindings
Basic Movement
| Key | Action |
|---|---|
, , , | Move left, down, up, right |
| Jump to top |
| Jump to bottom |
| Jump to row 5 |
| Jump to cell B9 |
| Jump to first column |
| Jump to first non-empty column in row |
| Jump to last non-empty column in row |
/ / | Jump to top / middle / bottom visible row |
/ | Move half page up / down |
View Alignment
| Key | Action |
|---|---|
| Align current row to top of window |
| Align current row to middle of window |
| Align current row to bottom of window |
Search
| Key | Action |
|---|---|
| Search forward |
| Search backward |
| Repeat last search (forward) |
| Repeat last search (backward) |
Marks & Jump List
| Key | Action |
|---|---|
| Set mark at current cell |
| Jump to mark |
| Move backward through jump list |
| Move forward through jump list |
Editing Keybindings
Insert Mode
| Key | Action |
|---|---|
| Edit current cell |
| Edit from start of cell |
| Clear cell and start editing |
| Leave insert / visual / command mode |
| Commit and move down |
| Commit and move right |
| Commit and move left |
| Commit and move down |
| Commit and move up |
Row Operations
| Key | Action |
|---|---|
| Insert row below and start editing |
| Insert row above and start editing |
| Delete current row |
Copy / Cut / Paste
| Key | Action |
|---|---|
| Yank (copy) current cell |
| Yank current row(s) |
| Cut current cell or selection |
| Paste current register |
Undo / Redo
| Key | Action |
|---|---|
| Undo |
| Redo |
| Undo all changes |
| Repeat last change |
Visual Mode
Enter visual mode with
v (cell selection) or V (row selection).
| Key | Action |
|---|---|
| Start visual cell selection |
| Start visual row selection |
| Insert formula after selected range (e.g., ) |
Command Mode
Press
: to open the command prompt.
| Command | Action |
|---|---|
| Save file |
| Save to a new file |
| Open another CSV file |
| Quit |
| Save and quit |
| Jump to cell B9 |
| Jump to cell B9 (shorthand) |
Common Patterns
Create a New CSV and Edit It
# Create a CSV with headers echo "Name,Amount,Category" > budget.csv sheets budget.csv
Pipe CSV Data and Edit
# Generate CSV from a database query and edit in sheets psql -c "COPY (SELECT * FROM sales) TO STDOUT WITH CSV HEADER" | sheets
Script: Update a Cell Programmatically
#!/bin/bash # Update Q4 value in financial report sheets report.csv D4=95000 D5=102000 D6=88000 echo "Updated Q4 values in report.csv"
Script: Extract a Range for Processing
#!/bin/bash # Extract column B rows 1-10 and sum them in bash values=$(sheets data.csv B1:B10) total=0 while IFS= read -r line; do total=$((total + line)) done <<< "$values" echo "Total: $total"
Script: Read a Specific Cell in a Shell Script
#!/bin/bash # Get current budget total from spreadsheet budget_total=$(sheets budget.csv C15) if [ "$budget_total" -gt 10000 ]; then echo "Budget exceeded!" fi
Go Integration Example
If building a Go application that generates CSV for use with sheets:
package main import ( "encoding/csv" "fmt" "os" "os/exec" ) func createAndOpenSpreadsheet(data [][]string, filename string) error { // Write CSV data f, err := os.Create(filename) if err != nil { return fmt.Errorf("creating file: %w", err) } defer f.Close() w := csv.NewWriter(f) if err := w.WriteAll(data); err != nil { return fmt.Errorf("writing CSV: %w", err) } w.Flush() // Open in sheets TUI cmd := exec.Command("sheets", filename) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() } func main() { data := [][]string{ {"Month", "Revenue", "Expenses", "Profit"}, {"January", "12000", "8500", "3500"}, {"February", "13500", "9200", "4300"}, {"March", "11800", "8900", "2900"}, } if err := createAndOpenSpreadsheet(data, "monthly_report.csv"); err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } }
Go: Read a Cell Non-Interactively
package main import ( "fmt" "os/exec" "strings" ) func readCell(csvFile, cell string) (string, error) { out, err := exec.Command("sheets", csvFile, cell).Output() if err != nil { return "", fmt.Errorf("reading cell %s: %w", cell, err) } return strings.TrimSpace(string(out)), nil } func readRange(csvFile, cellRange string) ([]string, error) { out, err := exec.Command("sheets", csvFile, cellRange).Output() if err != nil { return nil, fmt.Errorf("reading range %s: %w", cellRange, err) } lines := strings.Split(strings.TrimSpace(string(out)), "\n") return lines, nil } func main() { total, err := readCell("budget.csv", "B9") if err != nil { fmt.Println("Error:", err) return } fmt.Println("Budget total:", total) values, err := readRange("budget.csv", "B1:B6") if err != nil { fmt.Println("Error:", err) return } fmt.Println("Monthly values:", values) }
Tips for AI Agents
Suggesting Sheets for CSV Tasks
When a user wants to view or edit CSV files in the terminal, suggest sheets:
# Instead of cat data.csv sheets data.csv # Instead of awk/sed edits for simple changes sheets data.csv B3=new_value
Formula Insertion Workflow
- Navigate to the column where you want the formula
- Enter visual mode with
v - Select the range (e.g., B1:B8)
- Press
to insert formula after the selection:==|(B1:B8)
Efficient Navigation (Vim Users)
Sheets uses vim-style navigation — users familiar with vim can be productive immediately:
/gg
for top/bottomG
for movementhjkl
/i
for insert modesc
to delete rowsdd
/u
for undo/redoctrl+r
for search/
Troubleshooting
sheets
command not found
sheets# Ensure Go bin directory is in PATH export PATH=$PATH:$(go env GOPATH)/bin # Or install again and verify go install github.com/maaslalani/sheets@main which sheets
File Not Saved After Editing
Use
:w in command mode to save, or :wq to save and quit. Just pressing q or ctrl+c quits without saving.
TUI Rendering Issues
Sheets relies on terminal capabilities. If the display looks broken:
- Ensure your terminal supports 256 colors or truecolor
- Try a different terminal emulator (iTerm2, Alacritty, Ghostty, WezTerm)
- Check
environment variable:TERMecho $TERM
Reading Non-CSV Files
Sheets is designed for CSV format. Convert other formats first:
# Excel to CSV (using Python) python3 -c "import pandas as pd; pd.read_excel('data.xlsx').to_csv('data.csv', index=False)" sheets data.csv
Large Files Performance
For very large CSV files, navigate directly to specific cells rather than scrolling:
:goto A1000
or press
5G to jump to row 5 directly.