결과물 먼저

아래는 공식 데모이다.
nnn terminal filebrowser demo
Discover topics like linux, terminal, and the magic of the internet at Imgur, a community powered entertainment destination. Lift your spirits with funny jokes, trending memes, entertaining gifs, inspiring stories, viral videos, and so much more from users
imgur.com
개요
GitHub - jarun/nnn: n³ The unorthodox terminal file manager
n³ The unorthodox terminal file manager. Contribute to jarun/nnn development by creating an account on GitHub.
github.com
엄청난 앱을 하나 발견했다. CLI에서 파일 익스플로러처럼 탐색을 하게 해준다. 파일 작업이 많고 대부분 리모트로 작업하는 AI 개발자한테는 한 줄기 빛 같은 존재이다. 머시기머시기 뷰와 같이 ssh
기반의 GUI 앱을 이용할 수도 있지만 파일이 많은 폴더 잘못 열었다가는 컴퓨터가 폭발한다. 하지만 nnn
은 가벼운 less
와 tree
기반으로 목록을 출력하고 출력을 자른다. 게다가 플러그인들이 전부 shell
로 구현되어있어 무한 커스텀이 가능하다!
원래는 iTerm, WSL2 등 기능이 많은 로컬 쉘 인터페이스에서 쓰라고 만들어놓은 것 같다. 하지만 나는 윈도우 유저라 iTerm이 없고 WSL은 램 도둑에 하자가 많아서 안 좋아한다. 따라서 커스텀을 직접 해야 한다. 예를 들면, git bash는 화면 분할 기능이 없기 때문에 tmux
를 필수적으로 써야 한다.
자랑 하나 하자면 원래 tmux
에서 이미지랑 폴더 미리보기 안 됐는데 내가 커스텀했다.
설치
위 페이지의 Quickstart에서 하라는 대로 하면 된다. 3번이랑 8번은 안 해도 된다. 7번은 리모트라면 까먹지 말고 꼭 하셔야 한다.

1번만 좀 복잡하니 1번만 설명하겠다.

apt-get
등으로 한 번에 설치하는 방법이 있지만 버전 업뎃이 느리니 소스로 직접 설치한다. 일단 latest_release에 있는 파일 하나씩 아래 2개 빼고 다 다운 받아준다. 오른쪽마우스 -> 링크 복사 -> 쉘 가서 wget 링크
하면 된다. 좋아요로 감사 표시도 한다. tar.gz
파일은 tar -xvzf 파일이름
으로 압축을 해제한다. .sig
파일은 보증 문서 같은 거라 냅둬도 된다.


위와 같이 예쁘게 정리해준다.
sudo permission이 있을 경우
cd nnn-5.0
sudo make strip install
해주면 된다.
하지만 보통 리모트 + 멀티 유저 환경이면 permission이 없다. 그런 경우 PREFIX
를 활용해 나만 쓸 수 있도록 설치한다.
cd nnn-5.0/
make strip install PREFIX=설치하고싶은폴더/.local
그리고 이 사실을 몰랐을 경우 PATH
도 설정이 안 돼있을 확률이 높다. bash
를 쓴다면 ~/.bashrc, zsh
를 쓴다면 ~/.zshrc
로 가서 최하단에
PATH=$PATH:설치하고싶은폴더/.local/bin
을 삽입해준다. 그리고 source ~/.zshrc
등을 해주면 된다.
사용법

맥 iTerm 유저라면 저 영상대로만 해도 막힘 없이 사용할 수 있다. 하지만 윈도우 유저라면 아래의 커스텀이 필요하다. 먼저 vim ~/.zshrc
로 rc 파일을 열어준다. ^G
(시프트 G)를 누르면 최하단으로 이동한다. 거기다 아래 스크립트를 붙여넣어주면 된다.
############################
# nnn plugin setup
export NNN_PLUG='j:autojump;p:preview-tui;t:preview-tabbed;i:imgview;v:vidthumb;o:fzopen'
export NNN_OPENER="/data/$USER/.config/nnn/plugins/nuke"
export NNN_FIFO="/tmp/nnn.fifo"
export NNN_PREVIEWIMGPROG="imgcat" # used in preview-tui
export NNN_SPLIT='v' # used in preview-tui
export NNN_SPLITSIZE='55' # used in preview-tui
mn () {
session_name="${2:-'nnn'}";
# if the session already exists, kill it
tmux kill-session -t "$session_name" 2>/dev/null;
tmux new-session -d -s "$session_name" "source ~/.zshrc && nnn -a -c -d -e -U $@";
tmux attach-session -t "$session_name";
}
:wq
+ 엔터 하면 문서가 저장 후 닫힌다. 하단에 --INSERT--
라고 써있으면 ESC를 몇 번 눌러준 후 :wq
+ 엔터를 다시 입력하면 된다. (참고로 위 명령어들은 vim 기본 명령어이다. 기억하면 도움 많이 된다.) 위 스크립트를 한 줄씩 설명하겠다.
설명 (생략 가능)
nnn
은 따로 config 파일 같은 것이 없다. 0-config가 nnn
의 특장점이다. 모든 설정값을 nnn
을 시작할 때 환경변수로 입력해주는 식으로 작동한다. Portability의 끝판왕이라 할 수 있다.
export NNN_PLUG='j:autojump;p:preview-tui;t:preview-tabbed;i:imgview;v:vidthumb;o:fzopen'
플러그인을 삽입한다. ;
로 구분된다. =
양쪽에 띄어쓰기 하면 안 된다. 단축키:플러그인이름
구조로 되어있다. 실제 사용은 nnn
을 켜고 ;
을 입력하면 하단에 단축키 목록이 나온다. 이 때 원하는 키를 눌러주면 된다. preview-tui
플러그인을 가장 많이 쓰게 된다.

플러그인 목록은 여기서 확인할 수 있고, 설치가 잘 됐다면 ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins
에 아래와 같이 설치되어있어야 한다. XDG_CONFIG_HOME
를 따로 설정했다면 그 폴더 밑의 ./nnn/plugins
, 설정하지 않았다면 ~/.config/nnn/plugins
에 설치되어있을 것이다. 나도 아직 다 안 써봐서 각자의 기능은 잘 모른다. 괜찮은 플러그인이 있으면 업데이트 하겠다!

export NNN_OPENER="/data/$USER/.config/nnn/plugins/nuke"
export NNN_FIFO="/tmp/nnn.fifo"
퀵스타트와 똑같다. nnn
을 nuke
로 열게 하고 nnn
의 서브 프로세스들이 통신할 수 있도록 FIFO 파일 경로를 지정해준다.
export NNN_PREVIEWIMGPROG="imgcat" # used in preview-tui
export NNN_SPLIT='v' # used in preview-tui
export NNN_SPLITSIZE='55' # used in preview-tui
preview-tui
플러그인을 위한 셋업이다. 나중에 설명하겠다.
mn () {
# tmux's session name, should be unique, used for attaching, killing
session_name="${2:-'nnn'}";
# if the session already exists, kill it.
# 2>/dev/null for dumping the message
tmux kill-session -t "$session_name" 2>/dev/null;
# open a new tmux session in "detached mode", meaning it will be running in the BG
# send a command to the session and it'll run the cmd once done opening
tmux new-session -d -s "$session_name" "source ~/.zshrc && nnn -a -c -d -e -U $@";
# Let's get into the session!
tmux attach-session -t "$session_name";
}
nnn
을 tmux
에서 여는 걸 단축키로 만들었다. mn [경로] [세션이름]
하면 해당 경로에서 tmux 세션 이름을 갖고 열린다. 그냥 mn
만 치면 현재 경로에서 기본 세션이름 nnn
을 갖고 열린다. 만약 같은 이름의 세션이 존재하면 킬 하고 연다.
zsh
유저면 세션을 딱 켰을 때 oh-my-zsh
가 제대로 세팅이 안 된 모습을 볼 수 있을 것이다. mn
같은 alias도 작동을 안 한다. 왜인지 모르겠다. 세션을 켜자마자 source ~/.zshrc
하도록 해주면 해결된다. 그리고 nnn
을 열게 한다. $@
은 bash
에서 '사용하지 않은 나머지 argument들 전부' 를 뜻한다. mn 경로 세션 foo bar baz
라고 치면 경로
와 세션
은 앞에서 사용했기 때문에 $@
에는 foo bar baz
가 그대로 들어간다. nnn
에 추가 옵션을 주고 싶을 때 사용한다.
preview-tui
플러그인 tmux
에서도 "제대로" 돌아가게 하기
원래 tmux
구현은 돼있다. 하지만 하자가 많다. tmux
에서 이 플러그인을 켜면 오류만 뜬다. 아래를 따라하면 된다. 목표는 저 %
글자 1개를 지우는 것이다. 185번째 줄에 있다.

vim ~/.config/nnn/plugins/preview-tui
로 편집기를 켜고 :185
엔터 -> 저기로 커서 이동 -> a
입력 (수정모드) -> 백스페이스로 지우기 -> ESC (수정모드 탈출) -> :wq
엔터 하면 된다. 혹시 실수했다면 :q!
엔터 (저장 안 하고 종료) 한 다음 다시 시도한다.
이제 mn
-> ;p
를 입력해보면 플러그인이 작동하는 것을 볼 수 있다.

이미지 미리보기
하지만 아직 이미지는 보이지 않는다. 아래와 같이 메타 정보만 뜬다.

(TODO)
(공략 글 쓰고 있는데 갑자기 imgcat이 안 먹는다.)
* 정중앙에 리사이즈 해서 보이게 하기
* non-block으로 만들기
'리눅스 잡기술' 카테고리의 다른 글
VSCode Terminal에서 이미지 보기 (0) | 2024.01.17 |
---|