Claude Code Masterkurs – KI-gestuetztes Programmieren lernen mit Anthropics Coding-Agent

Lektion 34: nnn - Schneller Terminal File Manager

Tool-Lektion | 35 Minuten

nnn (n³) ist ein extrem schneller, minimalistischer Terminal File Manager, geschrieben in C. Die Philosophie: "The unorthodox terminal file manager" – maximale Performance bei minimalem Footpr

Lernziele

Lektion 34: nnn - Schneller Terminal File Manager

Metadaten

🚀 Claude Code Relevanz: nnn ist der schnellste Terminal-Dateimanager - navigiere blitzschnell durch grosse Projekte bevor du Claude Code einsetzt.

Berechtigung

Was ist nnn?

nnn (n³) ist ein extrem schneller, minimalistischer Terminal File Manager, geschrieben in C. Die Philosophie: "The unorthodox terminal file manager" – maximale Performance bei minimalem Footprint (~100 KB binary, <3000 LOC).

Hauptmerkmale

Installation

nnn kann ueber Paketmanager oder direkt aus dem Quellcode installiert werden. Das Kompilieren mit O_NERD=1 aktiviert Nerd Font Icons fuer eine bessere visuelle Darstellung:

# macOS mit Homebrew
brew install nnn

# Ubuntu/Debian
sudo apt update
sudo apt install nnn

# Arch Linux
sudo pacman -S nnn

# Oder von Source (neueste Version)
git clone https://github.com/jarun/nnn.git
cd nnn
make O_NERD=1  # Mit Nerd Font icons
sudo make install

Versionscheck

Pruefe welche Version installiert ist und welche Compile-Features aktiv sind. Die -V Option zeigt alle aktivierten Build-Flags:

nnn -v
# Ausgabe: nnn 4.9

# Mit Features
nnn -V
# Zeigt: O_NERD, O_GITSTATUS, O_ICONS, etc.

Zwecke

Wofür nnn verwenden?

Wann NICHT nnn verwenden?

Verwendung

Dieser Abschnitt fuehrt dich durch die Navigation, Datei-Operationen und das Plugin-System von nnn. Die Bedienung unterscheidet sich von ranger -- nnn hat eigene Keybindings.

Erste Schritte

nnn startet sofort und zeigt das aktuelle Verzeichnis. Die Flags -d (Detail-View) und -e (Editor-Integration) sind fuer den Einstieg empfehlenswert:

# nnn starten
nnn

# In spezifischem Verzeichnis
nnn ~/projects

# Mit Optionen
nnn -d  # Detail View
nnn -e  # Text files in $EDITOR
nnn -A  # Disable Auto-NNN-CD

Basis-Navigation

Die Navigation folgt dem hjkl-Schema, aber auch Pfeiltasten funktionieren. Das Besondere an nnn sind die 4 Contexts, zwischen denen du mit den Zifferntasten wechselst:

# Navigation
↑/k    # Hoch
↓/j    # Runter
→/l    # Enter directory / Open file
←/h    # Parent directory
g      # First entry
G      # Last entry
Home   # First entry
End    # Last entry
PgUp   # Page up
PgDown # Page down

# Context-Wechsel
1/2/3/4 # Zu Context 1/2/3/4 wechseln
Tab     # Nächster Context
Shift+Tab # Vorheriger Context

# Extras
~      # Home directory
/      # Start search-as-you-type
Ctrl+J # Filter

File-Operationen

Dateien werden zuerst mit Space markiert (Selection), dann mit Ctrl-Shortcuts verarbeitet. Dieser Zwei-Schritt-Ansatz ermoeglicht flexible Batch-Operationen:

# Selection & Operations
Space   # Toggle Selection (einzelne Datei)
a       # Select all in directory
m/M     # Show selections / Clear selections

# Nach Selection
Ctrl+X  # Delete selected
Ctrl+P  # Copy selected
Ctrl+V  # Move selected
Ctrl+R  # Rename selected (batch)

# Single-File Operations
^       # Rename (no selection needed)
Ctrl+N  # Create new file/directory
Ctrl+D  # Show details
d       # Show disk usage

Konfiguration: Environment Variables

nnn wird ausschliesslich ueber Umgebungsvariablen konfiguriert -- es gibt keine Config-Datei. Jeder Buchstabe in NNN_OPTS aktiviert eine Option, NNN_PLUG definiert die Plugin-Keybindings:

# ~/.bashrc / ~/.zshrc / ~/.config/fish/config.fish

# NNN_OPTS: Startup Options
export NNN_OPTS="dEnrx2"
# d = detail mode
# E = internal EDITOR
# n = nav-as-you-type
# r = rollover at top/bottom
# x = notis, sel to system clipboard, show xattr/icon
# 2 = 2 contexts on startup

# NNN_PLUG: Plugin Keybindings
export NNN_PLUG='f:finder;o:fzopen;p:preview-tui;d:diffs;'

# NNN_FIFO: Live Preview
export NNN_FIFO='/tmp/nnn.fifo'

# NNN_COLORS: Color Scheme
export NNN_COLORS='4321'
# Farben für: Context-1/2/3/4

# NNN_FCOLORS: File Type Colors
export NNN_FCOLORS='c1e2272e006033f7c6d6abc4'

# NNN_TRASH: Trash statt rm
export NNN_TRASH=1

# NNN_OPENER: Custom File Opener
export NNN_OPENER=~/.config/nnn/plugins/nuke

-Context Mode

┌──────────┬──────────┬──────────┬──────────┐
│ Context 1│ Context 2│ Context 3│ Context 4│
│ ~/       │ /tmp/    │ ~/work/  │ (leer)   │
│          │          │          │          │
│ Projects │ download │ client_a │          │
│ > docs   │ test.txt │ reports/ │          │
│ photos/  │ data.csv │ > memo   │          │
└──────────┴──────────┴──────────┴──────────┘

Drücke '1' → Wechselt zu Context 1 (~/Projects)
Drücke '2' → Wechselt zu Context 2 (/tmp/)

Plugins installieren

nnn-Plugins sind einfache Shell-Scripts, die mit dem offiziellen Installer heruntergeladen werden koennen. Plugins werden in nnn mit ; gefolgt vom zugewiesenen Buchstaben aufgerufen:

# Plugin-Verzeichnis erstellen
mkdir -p ~/.config/nnn/plugins

# Offizielle Plugins herunterladen
cd ~/.config/nnn/plugins
curl -Ls https://raw.githubusercontent.com/jarun/nnn/master/plugins/getplugs | sh

# Wichtige Plugins:
# - preview-tui: File Preview
# - fzopen: fzf integration
# - finder: fd integration
# - imgview: Image preview
# - diffs: Diff two files

Best Practices

Die folgenden Best Practices helfen dir, nnn optimal einzurichten und die wichtigsten Workflows zu etablieren.

. **NNN_OPTS für optimale UX**

Diese Kombination von Optionen bietet eine gute Balance aus Informationen und Bedienkomfort. Jeder Buchstabe aktiviert ein Feature:

# ~/.bashrc
export NNN_OPTS="AdenrUx2"

# A = no autoselect
# d = detail view
# e = open text in $EDITOR
# n = type-to-nav
# r = rollover navigation
# U = show user and group
# x = notis + clipboard
# 2 = 2 contexts on start

. **Trash statt Delete**

Standardmaessig loescht nnn Dateien unwiderruflich. Mit NNN_TRASH=1 werden geloeschte Dateien stattdessen in den Papierkorb verschoben und koennen wiederhergestellt werden:

# trash-cli installieren
brew install trash  # macOS
sudo apt install trash-cli  # Linux

# nnn konfigurieren
export NNN_TRASH=1

# Jetzt: Ctrl+X → Dateien in Trash
# Wiederherstellen: trash-list, trash-restore

. **cd-on-quit Feature**

Normalerweise aendert nnn das Arbeitsverzeichnis deiner Shell nicht. Die cd-on-quit-Funktion sorgt dafuer, dass dein Terminal nach dem Beenden von nnn im zuletzt besuchten Verzeichnis steht:

# ~/.bashrc / ~/.zshrc
n ()
{
    # Block nesting of nnn in subshells
    [ "${NNNLVL:-0}" -eq 0 ] || {
        echo "nnn is already running"
        return
    }

    export NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"

    nnn "$@"

    [ ! -f "$NNN_TMPFILE" ] || {
        . "$NNN_TMPFILE"
        rm -f "$NNN_TMPFILE" > /dev/null
    }
}

# ~/.config/fish/config.fish
function n
    set -l NNN_TMPFILE "$HOME/.config/nnn/.lastd"

    nnn $argv

    if test -e $NNN_TMPFILE
        source $NNN_TMPFILE
        rm $NNN_TMPFILE
    end
end

# Verwendung:
n  # nnn starten, navigieren, q drücken
pwd  # Ist jetzt nnn-Verzeichnis

. **Plugin-Keybindings sinnvoll belegen**

Lege die am haeufigsten genutzten Plugins auf leicht erreichbare Tasten. In nnn rufst du Plugins mit ; gefolgt vom Buchstaben auf:

# ~/.bashrc
export NNN_PLUG='f:finder;o:fzopen;p:preview-tui;v:imgview;d:diffs;t:treeview;'

# f = Find files with fd
# o = Open with fzf
# p = Preview files
# v = View images
# d = Diff files
# t = Tree view

# In nnn: ; drücken, dann Buchstaben
;f  # Öffnet finder-Plugin
;p  # Öffnet preview

. **Smart Filtering**

Mit Ctrl+J aktivierst du den Filter-Modus, der nur Dateien anzeigt die dem Pattern entsprechen. Regex wird unterstuetzt:

# In nnn
Ctrl+J  # Filter Mode aktivieren
*.py    # Zeigt nur Python-Files
Enter   # Filter aktiv

# Filter löschen
Ctrl+J
Backspace
Enter

# Regex möglich
^test_  # Files die mit test_ starten
\.md$   # Files die mit .md enden

. **Batch-Operations effizient**

Der Selection-Workflow in nnn: Zuerst Dateien mit Space markieren, dann die gewuenschte Operation mit Ctrl-Shortcuts ausfuehren. Die Ziel-Verzeichnisse werden ueber Contexts (1-4) gewaehlt:

# Mehrere Files markieren
Space Space Space  # 3x einzeln

# Oder: Alle markieren
a  # Select all

# Operations
Ctrl+X  # Delete all selected
Ctrl+P  # Copy selected to current dir
Ctrl+V  # Move selected to current dir

# Selektion ansehen
m  # Show selected paths

# Selektion löschen
M  # Clear all selections

. **Desktop-Integration**

nnn kann Dateien auch mit GUI-Anwendungen oeffnen, indem du den NNN_OPENER setzt. Auf macOS verwendest du open, das die Standard-Anwendung fuer den Dateityp oeffnet (z.B. Preview fuer PDFs, Finder fuer Ordner). Auf Linux nutzt du xdg-open, das die in den Desktop-Einstellungen konfigurierte Anwendung startet. In nnn drueckst du einfach o auf einer markierten Datei, und sie wird in der zugehoerigen GUI-Anwendung geoeffnet. Das ist besonders nuetzlich fuer Dateitypen, die im Terminal nicht gut darstellbar sind, wie Bilder, Videos oder Office-Dokumente.

# nnn mit GUI File Manager verbinden

# macOS
export NNN_OPENER=open

# Linux (Nautilus/Thunar/etc.)
export NNN_OPENER=xdg-open

# In nnn: o drücken
# Öffnet Current-File in Default-App

Beispiele

Die folgenden Beispiele zeigen nnn in typischen Alltagssituationen -- von der einfachen Navigation bis zum Plugin-basierten Workflow.

Beispiel 1: Erste Schritte

Ein einfacher Einstieg: nnn starten, navigieren und die Detail-Ansicht nutzen. Mit / kannst du direkt zum gewuenschten Eintrag springen:

# nnn starten
nnn

# Navigation
j j j  # 3x runter
l      # In Verzeichnis oder File öffnen
h      # Zurück

# Detail-View aktivieren
d  # Toggle Details (Größe, Datum, Permissions)

# Type-to-Navigate
/pro  # Springt zu erstem "pro*" Entry

# Home
~  # Zu Home-Directory

Ergebnis: Schnelle Navigation ohne Maus, minimale Keystrokes.

Beispiel 2: 4-Context Workflow

# nnn mit 4 Contexts starten
export NNN_OPTS="Adenrx4"  # 4 = vier Contexts
nnn

# Context-Setup
1  # Context 1 → ~/projects
2  # Context 2 → ~/Downloads
3  # Context 3 → /tmp
4  # Context 4 → ~/Documents

# Zwischen Contexts wechseln
Tab      # Nächster Context
Shift+Tab # Vorheriger Context

# Files zwischen Contexts kopieren
1        # Zu Context 1
Space    # File markieren
2        # Zu Context 2
Ctrl+P   # Paste (Copy)

Ergebnis: Vier Verzeichnisse gleichzeitig offen, schneller File-Transfer.

Beispiel 3: Plugin-System nutzen

# Plugins installieren
mkdir -p ~/.config/nnn/plugins
cd ~/.config/nnn/plugins
curl -Ls https://raw.githubusercontent.com/jarun/nnn/master/plugins/getplugs | sh

# ~/.bashrc
export NNN_PLUG='f:finder;o:fzopen;p:preview-tui;'

# In nnn
;f  # finder-Plugin (fd-basiert)
# Tippe Pattern: main.py
# Enter → Springt zu File

;o  # fzopen-Plugin (fzf-basiert)
# Fuzzy-Search durch Files
# Enter → Öffnet File

;p  # preview-tui-Plugin
# Zeigt Preview im Terminal

Ergebnis: Fuzzy-Search und Preview direkt in nnn.

Beispiel 4: Bulk-File-Rename

# Im Verzeichnis mit Bildern
nnn ~/Photos/vacation

# Alle JPGs markieren
Ctrl+J   # Filter
*.jpg
Enter

a        # Select all (gefilterte)

# Bulk-Rename
Ctrl+R   # Batch Rename
# Öffnet Editor mit File-Liste

# Im Editor (vim/nano/etc.):
IMG_001.jpg → vacation_001.jpg
IMG_002.jpg → vacation_002.jpg
# ...

# Speichern und schließen
:wq  # In vim

# nnn führt Umbenennung aus

Ergebnis: Bulk-Rename mit vollem Editor-Power.

Beispiel 5: Git-Repository-Navigation mit Plugin

# gitstatus-Plugin aktivieren
# (Erfordert nnn mit O_GITSTATUS compiled)

# Oder manuelles Plugin:
# ~/.config/nnn/plugins/git-status (selbst erstellen)
#!/bin/sh
git -C "$1" status
read -r _

# ~/.bashrc
export NNN_PLUG='g:git-status'

# In Git-Repo navigieren
nnn ~/projects/myapp

# Git-Status ansehen
;g  # Führt git status aus

# Modified Files finden
Ctrl+J
^M  # Regex: Files starting with M (Modified)

Ergebnis: Git-Workflow integriert in File-Navigation.

Beispiel 6: Image Preview mit imgview

# Abhängigkeiten
brew install viu  # Terminal Image Viewer
# Oder
sudo apt install w3m w3m-img

# Plugin konfigurieren
export NNN_PLUG='v:imgview'

# In Bild-Verzeichnis
nnn ~/Pictures

# Zu Bild navigieren
j j j  # Zum .jpg

# Image Preview
;v  # Zeigt Bild im Terminal

# Oder: Live Preview mit FIFO
export NNN_FIFO=/tmp/nnn.fifo
nnn &  # Im Hintergrund
# In anderem Terminal:
cat /tmp/nnn.fifo  # Zeigt aktuelle Selektion

Ergebnis: Bild-Preview ohne GUI-Tool.

Beispiel 7: Diff zwischen zwei Files

# diffs-Plugin verwenden
export NNN_PLUG='d:diffs'

# Zwei Files zum Vergleichen
nnn ~/projects/app

# Erste Datei markieren
Space  # config_old.json

# Zweite Datei markieren
j Space  # config_new.json

# Diff ausführen
;d  # Öffnet diff in pager

# Oder mit vimdiff
# diffs-Plugin bearbeiten:
#!/bin/sh
vimdiff "$1" "$2"

Ergebnis: Schneller File-Vergleich ohne separate Tools.

Beispiel 8: Archive-Handling

# archivemount installieren
brew install archivemount  # macOS
sudo apt install archivemount  # Linux

# Plugin erstellen: ~/.config/nnn/plugins/archive
#!/bin/sh
if [ -f "$1" ]; then
    mkdir -p /tmp/archive_mount
    archivemount "$1" /tmp/archive_mount
    nnn /tmp/archive_mount
    umount /tmp/archive_mount
fi

chmod +x ~/.config/nnn/plugins/archive

# ~/.bashrc
export NNN_PLUG='a:archive'

# .zip Datei markieren
;a  # Mountet und öffnet Archive

Ergebnis: In Archives navigieren wie in Verzeichnissen.

Beispiel 9: Disk Usage Analysis

# In nnn
d  # Detail View aktivieren

# Disk Usage berechnen
s  # Sort by size

# Oder mit ncdu-Plugin:
# ~/.config/nnn/plugins/ncdu
#!/bin/sh
ncdu "$1"

export NNN_PLUG='u:ncdu'

# Im Verzeichnis
;u  # Startet ncdu für detailed analysis

Ergebnis: Platzverschwendung schnell identifizieren.

Beispiel 10: fzf Integration für File-Search

# fzf installieren
brew install fzf

# fzopen-Plugin (sollte bereits installiert sein)
export NNN_PLUG='o:fzopen'

# In großem Projekt
nnn ~/projects/large-repo

# Fuzzy-Search
;o  # Öffnet fzf
# Tippe: main
# Enter → Springt zu main.py oder main.js

Ergebnis: Sofortige File-Suche in tiefen Hierarchien.

Beispiel 11: Trash-System Setup

# trash-cli installieren
brew install trash  # macOS
sudo apt install trash-cli  # Linux

# nnn konfigurieren
export NNN_TRASH=1

# In nnn
Space Space Space  # 3 Files markieren
Ctrl+X            # Delete (geht in Trash)

# Wiederherstellen im Terminal
trash-list        # Zeigt gelöschte Files
trash-restore     # Interactive Restore

# Oder endgültig leeren
trash-empty

Ergebnis: Sichere Löschungen mit Undo-Option.

Beispiel 12: Custom Opener für verschiedene File-Types

# ~/.config/nnn/plugins/nuke (Custom Opener)
#!/bin/sh

case "$1" in
    *.md)
        glow "$1" | less -R
        ;;
    *.json)
        jq '.' "$1" | less -R
        ;;
    *.pdf)
        open "$1"  # macOS
        ;;
    *.log)
        tail -f "$1"
        ;;
    *)
        $EDITOR "$1"
        ;;
esac

chmod +x ~/.config/nnn/plugins/nuke

# ~/.bashrc
export NNN_OPENER=~/.config/nnn/plugins/nuke

# In nnn: Enter drücken
# Öffnet Files mit Custom-Logic

Ergebnis: File-Type-spezifische Opener ohne manuelle Auswahl.

Integration mit Claude Code

nnn für AI-unterstützte Workflows

Setup für AI-Kontext-Export

# Plugin für Context-Export
# ~/.config/nnn/plugins/export-context
#!/bin/sh

output="/tmp/ai_context.txt"

# Current Directory Structure
tree -L 3 "$1" > "$output"

echo "" >> "$output"
echo "=== SELECTED FILES ===" >> "$output"

# Selected Files Content
while read -r file; do
    if [ -f "$file" ]; then
        echo "\n--- $file ---" >> "$output"
        head -50 "$file" >> "$output"
    fi
done < "$NNN_SEL"

echo "Context exported to $output"
read -r _

chmod +x ~/.config/nnn/plugins/export-context

# ~/.bashrc
export NNN_PLUG='e:export-context;'

# In nnn
Space Space Space  # Files markieren
;e                 # Export für AI

Workflow-Pattern

# Schritt 1: Projekt-Übersicht
nnn ~/projects/new-feature

# Schritt 2: Wichtige Files markieren
/\.py$  # Python-Files finden
a       # Alle markieren

# Schritt 3: Context exportieren
;e      # Export-Plugin

# Schritt 4: In Claude Code verwenden
# cat /tmp/ai_context.txt | pbcopy
# → In AI-Chat einfügen

Claude Code Integration

Workflow 1: Schnelle Projekt-Navigation

nnn ist der schnellste Weg, eine Projektstruktur zu erkunden, bevor du Claude Code einsetzt. Mit dem -d-Flag (Detail View) siehst du sofort Dateigroessen, Berechtigungen und Aenderungsdaten. Navigiere durch das src/-Verzeichnis, um die Code-Struktur zu verstehen und identifiziere die Dateien, die Claude Code bearbeiten soll. Die Startzeit von unter einer Millisekunde macht nnn zur perfekten Wahl fuer schnelle Checks zwischendurch. Druecke q, um nnn zu verlassen, und starte Claude Code mit den gewonnenen Erkenntnissen.

nnn -d src/

Workflow 2: Dateien mit Plugins oeffnen

Mit dem preview-tabbed Plugin bekommst du eine Datei-Vorschau, die den Inhalt der aktuell ausgewaehlten Datei in einem separaten Bereich anzeigt. Du startest nnn mit der NNN_PLUG-Variable, die das Preview-Plugin auf die Taste p legt. In nnn drueckst du dann ;p, um das Preview-Pane zu aktivieren. Das ist besonders nuetzlich, wenn du schnell den Inhalt mehrerer Dateien inspizieren willst, bevor du entscheidest, welche Claude Code bearbeiten soll. Die Preview aktualisiert sich automatisch, wenn du zu einer anderen Datei navigierst.

# In nnn: ; fuer Plugin-Menu
# Nutze preview-tabbed fuer Datei-Vorschau
NNN_PLUG='p:preview-tabbed' nnn

Workflow 3: Dateien zwischen Verzeichnissen organisieren

Vor einem Refactoring musst du oft Dateien zwischen Verzeichnissen verschieben oder reorganisieren. Mit nnn markierst du die gewuenschten Dateien mit Space, wechselst zum Ziel-Context und fuegst sie mit Ctrl+V (Move) oder Ctrl+P (Copy) ein. Das -a-Flag deaktiviert die automatische Selektion, was bei Batch-Operationen weniger verwirrend ist. Nutze die 4 Contexts, um Quell- und Zielverzeichnisse gleichzeitig offen zu haben. Nach der Reorganisation kann Claude Code auf die neue Struktur angesetzt werden.

# Selection-Mode: Space zum Markieren, p zum Kopieren
nnn -a
💡 Tipp: nnn ist extrem leichtgewichtig und startet sofort - perfekt fuer schnelle Navigation waehrend Claude Code Sessions.

Troubleshooting

Hier findest du Loesungen fuer die haeufigsten nnn-Probleme -- von fehlenden Icons bis zu Performance-Fragen.

Problem 1: Icons nicht sichtbar

Symptom: Komische Zeichen statt Icons

Ursache: Kein Nerd Font installiert

Lösung:

# 1. Nerd Font installieren
brew tap homebrew/cask-fonts
brew install --cask font-hack-nerd-font

# 2. Terminal-Font ändern
# iTerm2: Preferences → Profiles → Text → Font: "Hack Nerd Font"
# kitty: ~/.config/kitty/kitty.conf
font_family Hack Nerd Font Mono

# 3. nnn mit Icons neu kompilieren
git clone https://github.com/jarun/nnn.git
cd nnn
make O_NERD=1
sudo make install

# 4. Prüfen
nnn -V | grep O_NERD

Problem 2: Plugins funktionieren nicht

Symptom: ; + Buchstabe macht nichts

Ursache: NNN_PLUG nicht richtig gesetzt

Lösung:

# 1. NNN_PLUG prüfen
echo $NNN_PLUG

# 2. Plugins existieren?
ls ~/.config/nnn/plugins/

# 3. Plugins ausführbar?
chmod +x ~/.config/nnn/plugins/*

# 4. Test einzelnes Plugin
export NNN_PLUG='f:finder'
nnn
;f  # Sollte jetzt funktionieren

# 5. Debug
# In Plugin-Script am Anfang:
#!/bin/sh
echo "Plugin started with: $1" > /tmp/plugin_debug.log

Problem 3: cd-on-quit funktioniert nicht

Symptom: Nach q bleibt PWD unverändert

Ursache: Funktion nicht richtig definiert oder sourced

Lösung:

# 1. Funktion in ~/.bashrc prüfen
type n  # Sollte Funktion zeigen

# 2. ~/.bashrc neu laden
source ~/.bashrc

# 3. NNN_TMPFILE existiert?
echo $NNN_TMPFILE
ls -la ~/.config/nnn/.lastd

# 4. Test
n  # nnn starten
~  # Zu Home
q  # Beenden
pwd  # Sollte Home sein

Problem 4: Langsame Performance in großen Dirs

Symptom: nnn hängt bei 10000+ Files

Ursache: Detail-View oder Git-Status-Checks

Lösung:

# 1. Detail-View ausschalten
d  # In nnn toggled Details

# 2. Git-Status disablen (wenn O_GITSTATUS aktiv)
# nnn ohne O_GITSTATUS neu kompilieren

# 3. LANG=C für Speedup
LANG=C nnn

# 4. Oder: NNN_OPTS anpassen
export NNN_OPTS="Aenrx"  # Kein 'd' für Detail

Problem 5: Trash-System schlägt fehl

Symptom: Ctrl+X löscht sofort statt Trash

Ursache: trash-cli nicht installiert oder NNN_TRASH=0

Lösung:

# 1. trash-cli installieren
which trash-put  # Sollte vorhanden sein
# Falls nicht:
brew install trash  # macOS
sudo apt install trash-cli  # Linux

# 2. NNN_TRASH setzen
export NNN_TRASH=1

# 3. nnn neu starten
n

# 4. Test
Ctrl+X  # Sollte jetzt in Trash verschieben

# 5. Prüfen
trash-list

Vergleich mit Alternativen

| Feature | nnn | ranger | lf | Midnight Commander |
|---------|-----|--------|----|--------------------|
| Performance | ✅ C (sehr schnell) | ⚠️ Python (langsam) | ✅ Go (schnell) | ✅ C (schnell) |
| Binary Size | ✅ ~100 KB | ⚠️ ~10 MB | ✅ ~4 MB | ⚠️ ~2 MB |
| RAM Usage | ✅ 1-2 MB | ⚠️ 15-30 MB | ✅ 5-10 MB | ✅ 3-5 MB |
| Startup Zeit | ✅ <1ms | ⚠️ ~200ms | ✅ ~50ms | ✅ ~100ms |
| Plugin System | ✅ Shell Scripts | ✅ Python | ✅ Go | ⚠️ Begrenzt |
| Preview | ⚠️ Via Plugins | ✅ Native | ✅ Native | ⚠️ Text only |
| Keybindings | ⚠️ Custom | ✅ Vim-like | ✅ Vim-like | ⚠️ F-Keys |
| Contexts | ✅ 4-Context | ❌ Tabs | ✅ Tabs | ✅ 2-Panel |
| Learning Curve | ⚠️ Mittel | ⚠️ Mittel (vim) | ⚠️ Mittel | ✅ Niedrig |
| Customization | ⚠️ Env Vars | ✅ Umfangreich | ✅ Gut | ⚠️ INI |

Wann nnn?

Wann ranger?

Wann lf?

Wann Midnight Commander?

Nützliche Links

Offizielle Ressourcen

Tutorials

Integration

Community

Pro-Tipps

. **Auto-CD Setup perfektionieren**

Die erweiterte cd-on-quit-Funktion ist eines der wichtigsten Setups fuer nnn. Ohne sie aendert nnn dein Arbeitsverzeichnis nicht -- du landest nach dem Beenden wieder dort, wo du gestartet hast. Die Funktion prueft zuerst, ob nnn bereits in einer verschachtelten Instanz laeuft (NNNLVL), um Probleme zu vermeiden. Nach dem Beenden liest sie den zuletzt besuchten Pfad aus einer temporaeren Datei und wechselt dorthin. Die Aliases nf und nd starten nnn direkt in haeufig besuchten Verzeichnissen und sparen weiteres Tippen.

# ~/.bashrc - Enhanced Version
n() {
    [ "${NNNLVL:-0}" -eq 0 ] || {
        echo "nnn is already running"
        return
    }

    export NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"

    # Mit zusätzlichen Optionen
    nnn -d "$@"

    if [ -f "$NNN_TMPFILE" ]; then
        . "$NNN_TMPFILE"
        rm -f "$NNN_TMPFILE"
    fi
}

# Alias für schnelleren Start
alias nf='n ~/projects'  # Files-Shortcut
alias nd='n ~/Downloads'  # Downloads-Shortcut

. **Plugin-Keybindings nach Haeufigkeit**

Die Belegung der Plugin-Tasten sollte nach Nutzungshaeufigkeit erfolgen. Lege die am meisten genutzten Plugins (finder, fzopen, preview) auf einfach erreichbare Einzelbuchstaben. Weniger haeufig genutzte Plugins koennen auf Shift-Kombinationen gelegt werden. In nnn rufst du Plugins mit ; gefolgt vom zugewiesenen Buchstaben auf. Nach einiger Zeit wird das Muskelgedaechtnis die wichtigsten Plugin-Aufrufe automatisieren. Passe die Belegung an, sobald du merkst, welche Plugins du am haeufigsten verwendest.

# Meistgenutzte Plugins auf einfache Keys
export NNN_PLUG='f:finder;o:fzopen;p:preview-tui;v:imgview;d:diffs;t:treeview;'

# f/o/p = High-Frequency (ein Finger)
# v/d/t = Medium-Frequency (ein Finger)

# Weniger genutzte auf Shift-Keys
export NNN_PLUG='f:finder;F:bulkrename;'

. **Smart Trash-Workflow**

Ein durchdachter Trash-Workflow schuetzt vor versehentlichem Datenverlust und haelt gleichzeitig den Speicherplatz sauber. Die Aliase tl (list mit fzf fuer Fuzzy-Suche), tr (restore) und te (empty) machen das Trash-Management schnell und komfortabel. Der Cronjob leert automatisch alle Dateien, die aelter als 30 Tage sind, sodass der Papierkorb nicht endlos waechst. Mit NNN_TRASH=1 geht jede Loeschung in nnn automatisch in den Trash statt direkt auf die Festplatte. Das gibt dir ein Zeitfenster, um versehentlich geloeschte Dateien wiederherzustellen.

# ~/.bashrc
export NNN_TRASH=1

# Alias für Trash-Management
alias tl='trash-list | fzf'
alias tr='trash-restore'
alias te='trash-empty'

# Auto-Trash-Cleanup (30 Tage)
# Cron-Job:
# 0 2 * * * trash-empty 30

. **Context-Hotkeys fuer Projekte**

Mit Shell-Aliases kannst du nnn direkt in haeufig besuchten Verzeichnissen starten, ohne jedes Mal den Pfad eingeben zu muessen. Das Plugin-Script im Beispiel setzt alle 4 Contexts beim Start auf vordefinierte Verzeichnisse, sodass du sofort zwischen Projekten, Downloads, temporaeren Dateien und Dokumenten wechseln kannst. Die einfachere Alternative sind Shell-Aliases wie np fuer das Projekt-Verzeichnis und nd fuer Downloads. Waehle die Methode, die zu deinem Workflow passt.

# Plugin: project-contexts
# ~/.config/nnn/plugins/projects
#!/bin/sh

# Setze Contexts für Projekt-Workflow
nnn -C 1:"$HOME/projects" \
    -C 2:"$HOME/Downloads" \
    -C 3:"/tmp" \
    -C 4:"$HOME/Documents"

# Oder als Shell-Alias
alias np='nnn "$HOME/projects"'
alias nd='nnn "$HOME/Downloads"'

. **Batch-Operations mit External Editor**

Dieses Setup erlaubt es dir, die Liste der markierten Dateien in deinem Editor zu bearbeiten. Die NNN_SEL-Variable zeigt auf die Datei, die die Pfade aller markierten Dateien enthaelt. Ein Plugin oeffnet diese Datei in vim, wo du die Pfade bearbeiten, umbenennen oder loeschen kannst. Das ist maechtig fuer komplexe Batch-Operationen, die ueber einfaches Kopieren und Verschieben hinausgehen. Stell dir vor, du musst 50 Dateien nach einem bestimmten Pattern umbenennen: Du markierst sie, oeffnest die Liste in vim und nutzt vim-Makros fuer die Umbenennung.

# Selections in vim bearbeiten
# ~/.bashrc
export NNN_SEL='/tmp/.nnnsel'

# Plugin: edit-selection
#!/bin/sh
$EDITOR "$NNN_SEL"

# In nnn
Space Space Space  # Markieren
;e                 # Edit in vim
# Pfade bearbeiten, speichern
# nnn verwendet neue Liste

. **Live Preview mit Second Terminal**

# Terminal 1
export NNN_FIFO=/tmp/nnn.fifo
mkfifo /tmp/nnn.fifo
nnn

# Terminal 2
# ~/.config/nnn/plugins/preview-tabbed
#!/bin/sh
FIFO="$1"

# Watch FIFO and preview
while read -r selection < "$FIFO"; do
    clear
    bat --color=always "$selection"
done

# Oder mit tmux:
tmux split-window -h 'cat /tmp/nnn.fifo | bat'

. **Bookmarks via Environment**

# ~/.bashrc
export p="$HOME/projects"
export d="$HOME/Downloads"
export c="$HOME/.config"

# In nnn
# Ctrl+G (oder custom key) um bookmark-Liste zu zeigen
# Oder direkt starten:
nnn $p  # Öffnet projects

. **Performance Tuning für Huge Directories**

# LANG=C für Speed
export LANG=C

# NNN_OPTS ohne teure Features
export NNN_OPTS="Aenrx"  # Kein 'd' (detail), kein git

# Bei riesigen Dirs (>100k files):
LANG=C nnn -S  # -S = du (disk usage) caching

Zusammenfassung

Das Wichtigste zu nnn

nnn (n³) ist ein ultra-schneller, minimalistischer Terminal File Manager, optimiert für Performance und Low-Resource-Umgebungen:

Kern-Features:

Typische Anwendungsfälle:

Vorteile:

Nachteile:

Essential Operations:

hjkl       # Navigation
Space      # Select file
a          # Select all
Ctrl+X/P/V # Delete/Copy/Move
1/2/3/4    # Switch contexts
d          # Detail view toggle
;          # Plugin-Prefix

Essential Config:

export NNN_OPTS="Adenrx2"  # Startup options
export NNN_PLUG='f:finder;o:fzopen;p:preview-tui;'
export NNN_TRASH=1  # Trash statt rm
export NNN_FIFO=/tmp/nnn.fifo  # Live Preview

Best Practices:

Workflow-Muster:

n  # nnn mit cd-on-quit starten
1  # Context 1
j j j  # Navigate
Space  # Mark files
2  # Context 2
Ctrl+P # Paste
q  # Quit (PWD ändert sich)

Integration mit Claude Code:

Alternativen:

Entscheidungshilfe:

nnn ist die richtige Wahl für Performance-bewusste Entwickler, die einen blitzschnellen File Manager mit minimalem Footprint und Plugin-Flexibilität suchen.

Letzte Aktualisierung: Februar 2026 Schwierigkeitsgrad: Fortgeschritten Geschätzte Lernzeit: 25-35 Minuten Voraussetzungen: Terminal-Grundlagen, File-Management-Konzepte