Простой интерактивный текстовый редактор на Bash

July 02, 2020

На случай если даже нет Vim'а

Бывало ли у вас такое, что заходите на сервер, а там вообще нет ничего для редактирования текстов? От слова совсем, кроме дефолтных команд. На такой случай накатал небольшой текстовый редактор, который поддерживает интерактивный режим.

#!/usr/bin/env bash

${1:?”Set file for editing or type —help for help”}

if [ “$1” = “—help” ] then cat <<EOF Usage: edit file.name

Commands: e - edit line, type new line for replace current r - remove line i - insert new line x/q - save changes and exit ^c - abort and exit without saving Eneter - skip line and go to next EOF exit fi

if [ ! -f “$1” ] then echo “File $1 not exists!” exit 1 fi

echo -n > tmp.file

cmd=“s” starteditline=${2:-1} line=$starteditline i=0

mapfile -t rows < “$1”

for row in ”${rows[@]}” do if (( 0 < starteditline )) then ((i++)) if (( i < starteditline )) then echo “$row” >> tmp.file continue fi fi

echo -ne “\e[91m”; printf “%03d” $line; echo -e “\e[95m $row \e[39m”

if [[ $cmd = [xq] ]] then echo “$row” >> tmp.file else read -n 1 -s cmd case $cmd in “e”) echo -ne “\e[33m” ; read -r -p ” : ” replace ; echo -ne “\e[39m” echo ”${row//*/$replace}” >> tmp.file ;; “r”) echo -ne “\e[91m” ; printf “%03d” $line ; echo -e ” line removed \e[39m” ;; “i”) echo “$row” >> tmp.file echo -ne “\e[95m” ; read -r -p “new line: ” newline ; echo -ne “\e[39m” echo “$newline” >> tmp.file ;; *) echo “$row” >> tmp.file ;; esac fi

((line++)) done

sed -i ‘s/^\ / /g’ tmp.file cat tmp.file > “$1” && rm tmp.file

#EOF#

Исходники

geekjobru/xed
Simple Bash Interactive Text Editor Vim like. Contribute to geekjobru/xed development by creating an account on GitHub.

Ну и видео вариант данного текста



Profile picture

Written by Alexander Mayorov
Full Stack CTO

© 2022