Skip to content

Latest commit

 

History

History
475 lines (395 loc) · 22.2 KB

README_pt_BR.md

File metadata and controls

475 lines (395 loc) · 22.2 KB

An English version of this README is available.

OpenVi

OpenVi — Portable OpenBSD vi / ex

Índice

Visão geral

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.

Porquê?

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)
    • 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

Por que não?

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
  • 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

Construind

Pré-requisitos

Pré-requisitos necessários

  • 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, NetBSD curses V8+, PDCurses V2.8+, PDCursesMod, etc.)

Pré-requisitos opcionais

  • Perl 5+
  • Cshell (csh, tcsh, etc.)
  • nroff, groff, etc.

Plataformas suportadas

  • 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.

Plataformas não suportadas
  • 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.

Compilação

  • A compilação pode ser realizada invocando o GNU Make (geralmente gmake ou make) 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, onde N é 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)
    • OPTLEVEL - sinalizadores de otimização
      • (por exemplo OPTLEVEL=-O2)
    • CFLAGS - Flags para passar para o compilador C
      • (por exemplo CFLAGS="-Wall -pipe")
    • LIBS - Bibliotecas (substituindo padrões) para passar para o vinculador
      • (por exemplo LIBS="-lpdcurses -lflock")
    • LDFLAGS - Flags para passar para o linker
      • (por exemplo LDFLAGS="-L/lib/path -static")
    • V - Definido para ativar a saída de compilação detalhada
      • (por exemplo V=1)
    • DEBUG - Definido para compilar uma compilação de depuração
      • (ex. ​​DEBUG=1)
    • LGC - Definido para habilitar a coleta de lixo de tempo de link
      • (por exemplo LGC=1)
    • LTO - Definido para ativar a otimização de tempo de link
      • (por exemplo LTO=1)
    • EXTRA_LIBS - Bibliotecas extras para vinculação
      • (ex. ​​EXTRA_LIBS=-lmtmalloc)
    • PREFIX - Prefixo de diretório para uso com alvos install e uninstall
      • (ex. ​​PREFIX=/opt/OpenVi)
  • Os alvos usuais (all, strip, superstrip, clean, distclean, install, install-strip, uninstall, upx, etc.) estão disponíveis; Reveja o GNUmakefile 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

Especificações da plataforma

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.

AIX
  • Antes de compilar o OpenVi no AIX, instale as bibliotecas ncurses e cabeçalhos. IBM fornece os pacotes necessários, ncurses e ncurses-devel, no formato RPM como parte do AIX Toolbox for Linux e Software livre. Com as permissões apropriadas (por exemplo root), estes os pacotes são instaláveis ​​na maioria dos sistemas usando os utilitários dnf ou yum, 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 ou xlclang), IBM Open XL C/C++ V17.1+ (ibm-clang), ou GNU GCC (geralmente gcc, 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 para 32 (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 do PATH atual.
  • Bloqueio de arquivo (via flock() conforme fornecido pela biblioteca libbsd 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 software man do AIX (que é derivado do AT&T Sistema UNIX V.)

NetBSD
  • Nas instalações do NetBSD, as compilações padrão do OpenVi usam a biblioteca BSD curses fornecida pelo sistema base do NetBSD. Para usar ncurses, defina os valores de CFLAGS, LDFLAGS e CURSESLIB 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).

illumos
  • 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 pacote ncurses necessário no formato IPS. Com as permissões apropriadas (por exemplo root), o pacote pode ser instalado usando o utilitário pkg 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.

Solaris
  • Antes de compilar o OpenVi no Oracle Solaris 11, instale as bibliotecas e cabeçalhos ncurses. Oracle fornece o pacote ncurses necessário para Solaris 11 no formato IPS. Com as permissões apropriadas (por exemplo root), o pacote pode ser instalado usando o utilitário Solaris pkg, 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 para 1.
    • 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 ambiente SUNBITS para 32 (ex. export SUNBITS=32).
  • O bloqueio de arquivo não está disponível devido à ausência de flock() no Solaris. Isso será resolvido com o suporte ao bloqueio fcntl() estilo System V em um lançamento futuro.

Windows
  • 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.
Cygwin
  • 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 Cygwin setup.exe.
    • Invoque o utilitário cygcheck (i.e. cygcheck -cv | grep -v "OK$") para verificar a integridade de todos os pacotes atualmente instalados.

Disponibilidade

Código fonte

Pacotes

OpenVi está disponível para usuários de Linux e macOS por meio do Gerenciador de pacotes Homebrew.

Homebrew

brew install openvi

Outros pacotes de distribuição (não oficiais) podem estar disponíveis.

Status da embalagem

Versionamento

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.

Histórico

Licença

  • 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.

Agradecimentos

  • 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.

Projetos Similares

Veja também

  • Carsten Kunze's vi é um fork atualmente mantido do ramo original (1BSD/2BSD) do editor vi / ex, derivado do editor aprimorado de Gunnar Ritter versão do tradicional do editor vi.
  • 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 editor nvi / nex, agora desenvolvido por Sven Verdoolaege.