An English version of this README is available.
OpenVi — Portable OpenBSD vi
/ ex
- Visão geral
- Construindo
- Disponibilidade
- Versionamento
- Histórico
- Licença
- Agradecimentos
- Projetos similares
- Veja também
OpenVi é uma implementação aprimorada e portátil do Berkeley
vi
/ ex
editor de texto, originalmente desenvolvido por Bill Joy.
OpenVi é um fork do editor vi
/ ex
incluído no
OpenBSD, que é derivado da versão 1.79 do editor nvi
originalmente
distribuído como parte da Fourth Berkeley Software Distribution (4BSD).
O editor nvi
foi desenvolvido por Keith Bostic da Computer Systems
Research Group (CSRG) na Universidade da Califórnia, Berkeley, Sven
Verdoolaege e outros colaboradores. O próprio Nvi
foi derivado de Steve
O editor do Elvis
de Kirkendall.
Por que você deveria usar OpenVi em vez de AnotherVi?
- Derivado do código do sistema base OpenBSD (extensivamente auditado)
- Foco na legibilidade, simplicidade e correção da implementação
- Aderência às práticas padrão de codificação segura do OpenBSD
- Usa funções seguras (por exemplo
strlcpy
,snprintf
,mkstemp
,pledge
)
- Usa funções seguras (por exemplo
- Complexidade reduzida para menos defeitos de programa
- Código-fonte limpo, distribuído sob uma licença BSD permissiva de 3 cláusulas
- Código de suporte é distribuído sob a licença ISC (mais permissiva)
- Principalmente em conformidade com os padrões relevantes (POSIX, SUS), quando aplicável
- Aprimoramentos, comportamentos fora do padrão e novos recursos são conservadoramente e implementados de forma sensata com cuidado para equilibrar as expectativas do usuário, complexidade e precisão histórica
- Extensões como
bserase
,expandtab
,imctrl
,visibletab
, etc. - A compilação requer apenas utilitários GNU Make e POSIX padrão
- Fácil integração com bootstrap incorporado, mínimo ou iterativo ambientes e distribuições (como compilações Linux From Scratch)
- Sem opções de configuração em tempo de compilação ou em tempo de compilação
- Configuração de compilação padrão única sem variantes incompatíveis
- Nenhum bug específico de configuração resultante de combinações não testadas ou caminhos de código raramente exercitados
- Documentação concisa e compreensível; sem variações sutis de plataforma
- Interface de usuário, script e comportamento de mapa consistentes em todas as plataformas
- Utiliza o mecanismo de expressão regular estendido baseado em Spencer do OpenBSD (também adotado por LLVM, Tcl, etc.) em todos os sistemas suportados
- Binário único, compacto e independente
- Não são necessários arquivos de dados externos em tempo de execução
- Sem dependências de bibliotecas externas (além de curses)
- Adequado para ligação estática e uso de “resgate” de emergência
- Todos os vários ajustes, correções, melhorias e limpezas acumuladas mais de 25 anos como parte do sistema base OpenBSD
Então, por que você não quer usar o OpenVi?
Alguns desses pontos podem ser características desejáveis, dependendo do seu ponto de vista.
- O suporte à internacionalização está faltando no momento
- Sem suporte para Unicode / UTF-8 / exibição de caracteres amplos
- Os caracteres multibyte são mostrados como bytes individuais, em vez de glifos
- O suporte multibyte está planejado, mas infelizmente não é trivial, veja:
- Schwarze, I. (2016, 25 de setembro). Mantenha o suporte a caracteres multibyte simples [Apresentação em conferência]. Convenção EuroBSDCon 2016, Belgrado, Sérvia. [pdf:OpenBSD]
- Jun-ichiro itojun Hagino [KAME Project] e Yoshitaka Tokugawa [Projeto WIDE]. (1999, 6 de junho). Clones vi multilíngues: passado, agora e o futuro [Apresentação em conferência]. Em Anais do conferência anual sobre USENIX, Conferência Técnica Anual (USENIX ATEC '99). Associação USENIX, Monterey, CA, EUA, página 45. [doi:10.5555/1268708.1268753], [resumo: USENIX] (legado)
- Sem suporte para texto bidirecional
- Sem suporte para localização regional ou tradução de mensagens
- Sem suporte para Unicode / UTF-8 / exibição de caracteres amplos
- Manuseio ineficiente de arquivos extremamente grandes (por exemplo multi-GB)
- Sem suporte para realce de sintaxe, conclusão de código com reconhecimento de contexto, código integrações de dobramento ou “servidor de idiomas”
- Nenhuma funcionalidade interativa de gravação e depuração de macro
- Sem suporte de script avançado (sem BASIC, COBOL, JavaScript, Lua, Perl, PHP, Python, REXX, Ruby, S-Lang, Tcl ou qualquer outro)
- Somente interfaces de modo visual baseado em maldições e modo
ex
baseado em linha disponíveis- Sem suporte para X11/Wayland, OpenGL/Vulkan, Neuralink, realidade aumentada/virtual ou qualquer outra interface gráfica do usuário
- ambiente POSIX.1-2008: shell POSIX (
sh
) e utilitários, Awk (mawk
,nawk
), etc. - GNU Make (versão 3.81 ou posterior)
- Compilador C99 (por exemplo
xlc
,suncc
,clang
,gcc
, etc.) - Curses (
ncurses
, NetBSDcurses
V8+,PDCurses
V2.8+,PDCursesMod
, etc.)
- Perl 5+
- Cshell (
csh
,tcsh
, etc.) nroff
,groff
, etc.
-
OpenVi é facilmente portátil para a maioria das plataformas com operação semelhante ao UNIX sistemas que estão em conformidade com a interface de programação descrita por IEEE Std 1003.1-2008 e ambiente do usuário descrito por IEEE Std 1003.2-2008, também conhecido como POSIX.1-2008 e POSIX.2-2008, respectivamente.
-
Os seguintes sistemas operacionais são totalmente suportados e testados regularmente usando processadores ix86/AMD64, ARM/AArch64, m68k, MIPS, POWER e RISC-V:
- IBM AIX 7.1+
- Apple Darwin (macOS / Mac OS X) (ARM64, Intel, PowerPC)
- FreeBSD 12.3+
- Distribuições GNU/Linux (glibc, musl)
- illumos OpenIndiana Hipster
- NetBSD 9+
- OpenBSD 6.9+
- OracleSolaris* 11+
- Microsoft Windows (Cygwin, Midipix, MSYS2, WSL)
-
Os seguintes compiladores são totalmente suportados e testados regularmente:
- LLVM Clang (BSD, Darwin, illumos, Linux, Solaris, Windows) V6+
- AMD Optimizing C/C++ (Linux) V3+
- GNU GCC (AIX, BSD, Darwin, illumos, Linux, Solaris, Windows) V4.6+
- IBM Advance Toolchain (Linux on POWER) V14.0+
- IBM Open XL C/C++ (AIX) V17.1+
- IBM XL C/C++ (AIX, Linux) V16.1+
- Intel oneAPI DPC++/C++ (Linux) V2021+
- Intel C Compiler Classic (Darwin, Linux) V19.1+
- Oracle Developer Studio (Linux, Solaris) V12.6+
- PCC Portable C Compiler (NetBSD) V1.0.0+
Versões de sistema operacional e compilador mais recentes ou mais antigas, dentro do razoável, devem trabalhar. As versões listadas acima são aquelas regularmente testadas e comprovadamente funcionando.
- As seguintes plataformas não são suportadas atualmente, mas suporte é
planejado para um lançamento futuro:
- Haicai Walter
- SGI IRIX
Contribuições de usuários para melhorar o suporte da plataforma são bem-vindas.
- A compilação pode ser realizada invocando o GNU Make (geralmente
gmake
oumake
) do diretório de nível superior de uma versão de código-fonte ou git checkout. - O sinalizador
-j N
do GNU Make pode ser usado para paralelizar a compilação, ondeN
é um número inteiro positivo que representa o número de tarefas paralelas solicitadas. - As seguintes variáveis de ambiente influenciam a compilação e instalação:
CC
- Compilador C a ser usado- (ex.
CC=gcc
)
- (ex.
OPTLEVEL
- sinalizadores de otimização- (por exemplo
OPTLEVEL=-O2
)
- (por exemplo
CFLAGS
- Flags para passar para o compilador C- (por exemplo
CFLAGS="-Wall -pipe"
)
- (por exemplo
LIBS
- Bibliotecas (substituindo padrões) para passar para o vinculador- (por exemplo
LIBS="-lpdcurses -lflock"
)
- (por exemplo
LDFLAGS
- Flags para passar para o linker- (por exemplo
LDFLAGS="-L/lib/path -static"
)
- (por exemplo
V
- Definido para ativar a saída de compilação detalhada- (por exemplo
V=1
)
- (por exemplo
DEBUG
- Definido para compilar uma compilação de depuração- (ex.
DEBUG=1
)
- (ex.
LGC
- Definido para habilitar a coleta de lixo de tempo de link- (por exemplo
LGC=1
)
- (por exemplo
LTO
- Definido para ativar a otimização de tempo de link- (por exemplo
LTO=1
)
- (por exemplo
EXTRA_LIBS
- Bibliotecas extras para vinculação- (ex.
EXTRA_LIBS=-lmtmalloc
)
- (ex.
PREFIX
- Prefixo de diretório para uso com alvosinstall
euninstall
- (ex.
PREFIX=/opt/OpenVi
)
- (ex.
- Os alvos usuais (
all
,strip
,superstrip
,clean
,distclean
,install
,install-strip
,uninstall
,upx
, etc.) estão disponíveis; Reveja oGNUmakefile
para ver todos os alvos e opções disponíveis.
Por exemplo, para compilar uma compilação de depuração de tamanho agressivamente otimizado, permitindo otimização de tempo de link e coleta de lixo de tempo de link, usando explicitamente CCG:
env CC=gcc OPTLEVEL=-Os LGC=1 LTO=1 gmake sstrip
ou, para compilar detalhadamente uma compilação de depuração, explicitamente usando Clang:
env CC=clang DEBUG=1 V=1 gmake
Para sistemas com GNU Make como make
(por exemplo GNU/Linux), compilação básica
deve ser bem-sucedido sem nenhuma opção ou configuração adicional necessária:
make
Com os privilégios apropriados para manipular arquivos dentro do PREFIX
escolhido
(usando doas
, sudo
, su
, etc.), o executável compilado pode ser instalado —
como está ou despojado — usando uma invocação como:
doas gmake install-strip
ou
sudo env PREFIX=/usr/local make install
As seções a seguir documentam apenas diferenças específicas de plataforma e não pretendem ser uma referência geral ou exaustiva. Para instalação de pacotes de software de pré-requisito ou outra configuração do sistema, consulte a documentação do fornecedor.
-
Antes de compilar o OpenVi no AIX, instale as bibliotecas
ncurses
e cabeçalhos. IBM fornece os pacotes necessários,ncurses
encurses-devel
, no formato RPM como parte do AIX Toolbox for Linux e Software livre. Com as permissões apropriadas (por exemploroot
), estes os pacotes são instaláveis na maioria dos sistemas usando os utilitáriosdnf
ouyum
, por exemplo:dnf install ncurses ncurses-devel
ou
yum install ncurses ncurses-devel
O sistema base IBM AIX (e PASE for i, um sistema de tempo de execução integrado ambiente para aplicativos AIX no sistema operacional IBM i) fornece
libxcurses
, uma implementação XPG4/XSI Extended Curses derivado do AT&T System V, que ainda não é suportado para uso com OpenVi. -
A compilação é suportada usando IBM XL C/C++ V16.1+ (
gxlc
ouxlclang
), IBM Open XL C/C++ V17.1+ (ibm-clang
), ou GNU GCC (geralmentegcc
,gcc-8
,gcc-9
,gcc-10
,gcc-11
):- Otimização de tempo de link (
LTO=1
) requer Open XL C/C++ V17.1+. O IBM (AIX Toolbox) e Bull/Atos (Bull Freeware) GCC pacotes e versões IBM XL C/C++ anteriores à V17.1 são não habilitado para LTO. - A coleta de lixo em tempo de link (
LGC=1
) não é suportada no IBM AIX. - Uma compilação de 64 bits é o padrão em sistemas operando no modo de 64 bits; para
compilação de 32 bits, defina o valor da variável de ambiente
MAIXBITS
para32
(ex. export MAIXBITS=32
). - O valor da variável de ambiente
CC
deve ser definido como o caminho completo do compilador (por exemplo/opt/freeware/bin/gcc
,/opt/IBM/xlC/16.1.0/bin/gxlc
,/opt/IBM/openxlC/17.1.0/bin/ibm-clang
, etc.) a menos que o diretório do compilador já faça parte doPATH
atual.
- Otimização de tempo de link (
-
Bloqueio de arquivo (via
flock()
conforme fornecido pela bibliotecalibbsd
do AIX) é não funcional; isso será investigado e corrigido em uma versão futura. -
As páginas man OpenVi são criadas com
mandoc
e requerem conversão antes de usar com o softwareman
do AIX (que é derivado do AT&T Sistema UNIX V.)
-
Nas instalações do NetBSD, as compilações padrão do OpenVi usam a biblioteca BSD
curses
fornecida pelo sistema base do NetBSD. Para usarncurses
, defina os valores deCFLAGS
,LDFLAGS
eCURSESLIB
variáveis de ambiente apropriadamente (isto éCFLAGS=-I/usr/pkg/include
LDFLAGS=-L/usr/pkg/lib
CURSESLIB=-lncurses
). -
O linker LLVM LLD é necessário para otimização de tempo de link (
LTO=1
) usando Clang. Está disponível como um pacote instalável (i.e.pkgin instalar lld
).
-
Antes de compilar o OpenVi em uma distribuição illumos (i.e. OpenIndiana), instale as bibliotecas e cabeçalhos
ncurses
. A distribuição OpenIndiana fornece o pacotencurses
necessário no formato IPS. Com as permissões apropriadas (por exemploroot
), o pacote pode ser instalado usando o utilitáriopkg
OpenIndiana, por exemplo:pkg install ncurses
O sistema base OpenIndiana fornece
libcurses
, um XPG4/XSI Implementação Extended Curses derivada do AT&T System V, que não ainda suportado para uso com OpenVi. -
A coleta de lixo em tempo de link (
LGC=1
) não é suportada em OpenIndiana.
-
Antes de compilar o OpenVi no Oracle Solaris 11, instale as bibliotecas e cabeçalhos
ncurses
. Oracle fornece o pacotencurses
necessário para Solaris 11 no formato IPS. Com as permissões apropriadas (por exemploroot
), o pacote pode ser instalado usando o utilitário Solarispkg
, por exemplo:pkg install ncurses
O sistema base Oracle Solaris fornece
libcurses
, uma XPG4/XSI Implementação Extended Curses derivada do AT&T System V, que ainda não não é suportado para uso com OpenVi. -
A compilação é suportada usando Oracle Developer Studio, GCC e Clang:
- Ao usar Oracle Developer Studio, invoque o compilador como
suncc
ou defina o valor da variável de ambiente_OSLCC
para1
. - A otimização de tempo de link (
LTO=1
) é atualmente suportada apenas ao usar GCC ou Clang. - A coleta de lixo em tempo de link (
LGC=1
) não é suportada no Solaris. - Ao usar o compilador Oracle Developer Studio (
suncc
), uma build 64-bit é o padrão em sistemas operando no modo de 64 bits; para uma build em 32 bits, defina o valor da variável de ambienteSUNBITS
para32
(ex.export SUNBITS=32
).
- Ao usar Oracle Developer Studio, invoque o compilador como
-
O bloqueio de arquivo não está disponível devido à ausência de
flock()
no Solaris. Isso será resolvido com o suporte ao bloqueiofcntl()
estilo System V em um lançamento futuro.
- Microsoft Windows suporta vários desenvolvimentos e tempo de execução, incluindo MSVC, Cygwin, Midipix, MSYS2, UWIN, o ambiente Git Bash e outros. Deve-se tomar cuidado para evitar a mistura de bibliotecas e ferramentas incompatíveis.
- Problemas de compilação no ambiente Cygwin geralmente são causados por
instalações de pacotes incompletos ou interrompidos, ou pela instalação de
pacotes usando ferramentas não padrão (por exemplo
apt-cyg
), o que pode resultar em arquivos ausentes e links simbólicos pendentes ou ausentes. - Antes de compilar OpenVi em Cygwin, é altamente
recomendado que:
- Atualize o aplicativo Cygwin
setup.exe
para a última versão disponível. - Atualize todos os pacotes instalados usando a nova aplicação Cygwin
setup.exe
- Instale os pacotes de pré-requisito necessários (ou seja,
make
,gcc
,ncurses
,ncurses-devel
) usando o aplicativo Cygwinsetup.exe
. - Invoque o utilitário
cygcheck
(i.e.cygcheck -cv | grep -v "OK$"
) para verificar a integridade de todos os pacotes atualmente instalados.
- Atualize o aplicativo Cygwin
OpenVi está disponível para usuários de Linux e macOS por meio do Gerenciador de pacotes Homebrew.
brew install openvi
Outros pacotes de distribuição (não oficiais) podem estar disponíveis.
O número da versão do OpenVi é baseado na versão do lançamento do OpenBSD correspondente,
seguido pelo número do lançamento do OpenVi. O comando version
pode ser usado para exibir esta
informação no formato mostrado abaixo.
Version 7.0.1 (OpenVi) 10/25/2021.
Esta mensagem indica que o editor em uso é OpenVi, versão 1,
derivado do OpenBSD versão 7.0, e é totalmente sincronizado com as versões OpenBSD de
vi
, ex
, db
, e regex
a partir de 10/25/2021 (25 de outubro de 2021).
Alterações não derivadas de commits do OpenBSD não avançam nesta data. Novos lançamentos do OpenBSD não redefinem o número do lançamento do OpenVi.
-
OpenVi
-
OpenBSD
vi
- OpenBSD
vi
/ex
- OpenBSD
db
- OpenBSD
regex
- OpenBSD
- OpenVi é distribuído sob os termos de uma licença 3-clause BSD.
- Veja o arquivo
LICENSE.md
para a licença completa e termos de distribuição.
- rqsd de Libera.Chat pela ideia que inspirou o projeto e os testes.
- S. V. Nickolas, Jason Stevens, e o Virtually Fun Discord comunidade, pelo suporte e feedback.
- Dos agradecimentos originais do
vi
(por Bill Joy e Mark Horton):- Bruce Englar encorajou o desenvolvimento inicial deste editor de exibição.
- Peter Kessler ajudou a trazer sanidade ao layout de comando da versão 2.
- Bill Joy escreveu a versão 1, versões 2.0 até 2.7 e criou a estrutura que os usuários veem no editor atual.
- Mark Horton adicionou macros e outros recursos e fez o editor funcionar em um grande número de terminais e sistemas UNIX.
- Agradecemos o apoio financeiro dos UUNET Communications Services.
Xvi
de Martin Guy, uma versão melhorada de [STEVIE
]( de Tim Thompson https://timthompson.com/tjt/stevie/)- S. V. Nickolas'
Sivle
, um fork limpo de Steve KirkendallElvis
- Andy Valencia's
Vim57
, um fork simplificado da versão 5.7 de Bram MoolenaarVim
- Carsten Kunze's
vi
é um fork atualmente mantido do ramo original (1BSD/2BSD) do editorvi
/ex
, derivado do editor aprimorado de Gunnar Ritter versão do tradicional do editorvi
. Nvi2
é um branch de recursos atualmente mantido da nova versão (4BSD) do editor *nvi
* /nex
, com foco em extensibilidade e novas funcionalidades.Nvi1
(versão 1.8+) é o branch tradicional atualmente mantido do novo (*4BSD *) versão do editornvi
/nex
, agora desenvolvido por Sven Verdoolaege.