Artikelverzeichnis
1. C/C++-Umgebungskonfiguration unter Windows 10
1.1 Einführung in MSYS2
Cygwin
MSYS2
Ursprünglich entdeckte einer der ursprünglichen Ingenieure , dass das System eine Zieldatei (dh eine ausführbare Datei) verwendet und die Toolkette bereits Zieldateien unterstützt und Sprachbibliotheken bereitstelltCyguns
. Theoretisch ist die Umleitung ( Entsprechend der Neukompilierung der entsprechenden Zielplattform) kann dieser Compiler als (Cross-Compiler) ausführbare Dateien unter der Plattform generieren . Basierend auf dieser Idee wurde das ursprüngliche Compiler-Tool für die Plattform entwickelt , um das eigene Compiler-Tool zur Generierung von Plattformanwendungen zu ersetzen. Um die Nutzung zu nutzen , realisieren Sie die Integration von Befehlsinterpretern (z. B. . Da es eine eingebettete Toolkette auf dem System bereitstellen kann (die vorherige Lösung besteht darin, sie zu verwenden ) und auch implementieren kann (Cross-Compilation von Drittanbietern), kann es auf einer Remote-Workstation zum Kompilieren von Code für andere Plattformen verwendet werden Dadurch wird eine große Anzahl von Ingenieuren angezogen, sich an der Entwicklung zu beteiligen. Später, mit der Entwicklung und dem Wachstum des Systems, kann das aktuelle System nicht nur Kompatibilität bieten, sondern auch mehr Abhängigkeiten von der Simulationsschicht realisieren, was viele Menschen auf eine Transplantation der Anwendung hoffen lässtCygwin
Cyguns
Steve Chamberlain
Windows
COFF
GNU
x86
COFF
C
newlib
GCC
cross compiler
GCC
Windows
Steve Chamberlain
Cygwin
Windows
GCC
MSVC
Windows
GCC
Steve Chamberlain
dll
Posix
Windows
API
Bourne shell
bash
Cygwin
Windows
DJGPP
three-way cross-compile
Cygwin
Linux
Cygwin
POSIX
Linux
Windows
Die Aufgabe der Plattform wird übergebenCygwin
.MinGW
DaCygwin
die Kompilierung und der Aufruf der Anwendung vonPOSIX
derWindows API
mittleren Schicht abhängen, führt dies auch zuCygwin
einer immer größeren Größe, undGNU
auch die Nachfrage der Entwickler nach Toolketten, die keine mittlere Schicht erfordern, wird immer stärker. Um diesen Zweck zu erreichen,Colin Peters
wurde 1998 ein Open-Source-Projekt erstellt und benannt (Minimalist GNU für W32). Später wurde „mingw32
32“ entfernt und der Projektname wurde zuMinGW
. Es stellte eine Reihe von Header-Dateien und Importbibliotheken zur Minimierung von Toolchain- Abhängigkeiten bereit Verwendung. Als sich radikalere Entwickler anschlossen und mit der Entwicklung von , und begannen , befreiten sie sich auch vollständig von ihrer Abhängigkeit und ihr Hauptbeitrag bestand darin , dem Paket spezifischere Funktionen hinzuzufügen . Das Projekt wurde auf das Jahr 2000 verschoben , um mehr Hilfe von der Community zu erhalten und sich auf die Entwicklung zu konzentrieren. Aufgrund von Differenzen zwischen dem Projektteam und dem Projekt wurde das Projekt später auf das Jahr 2018 verschoben .MSVCRT.DLL
Microsoft Visual C Runtime
GNU
Cygwin
Jan-Jaap van der Heijden
binutils
GCC
make
MinGW
Cygwin
Mumit Khan
Windows
SourceForge
SourceForge
OSDN
MSYS
MSYS
(Minimal SYStem
) wurde entwickelt, um die Mängel derMinGW
fehlenden Skriptausführungsumgebung auszugleichen. Die mittlere Schicht bietet nur grundlegende Funktionen . Wenn sie zum Erstellen von Anwendungen verwendet wird und keine spezielle Arbeit erforderlich ist, wird die Hauptarbeit durch integrierte Direktaufrufe erledigt . Daher existiert es während des gesamten Arbeitsprozesses nur als Hilfswerkzeugkasten.shell
msys.dll
POSIX API
MSYS
POSIX API
MinGW
Windows API
MSYS
MinGW-w64
Aus ungeklärten GründenMinGW
ist das Update zu langsam und die Unterstützung für 64-Bit-Programme ist in weiter Ferne. In Verbindung mit demAPI
Aufkommen neuer Programme bestehtMinGW
in Zukunft ein dringender Bedarf an Unterstützung für 64-Bit-Programme. Um dieser neuen Herausforderung zu begegnen,OneVision Software
wurde ein Zweig erstelltMinGW
und benannt , der die Generierung von BitprogrammenMinGW-w64
unterstützt .Windows 64
Als der Code jedoch anschließendMinGW
dem Projektteam vorgelegt wurde,OneVision
lehnte das Projektteam ihn mit der Begründung ab, dass er nicht öffentliche oder proprietäre Informationen verwendete. Später wurde der Code einem der Hauptentwickler unter der Bedingung gespendet, dass er offenOneVision
blieb source , und anschließend und andere Der Hauptentwickler hat beschlossen, die Zusammenarbeit mit zu beenden und keine offiziellen Binär-Builds mehr bereitzustellen.MinGW-w64
Kai Tietz
Kai Tietz
MinGW
MSYS2
MinGW-w64
DaMSYS
die Aktualisierung zu langsam und zu alt war, wurdeMSYS2
( ) ebenfalls unabhängig auf der GrundlageMinimal SYStem 2
modernererCygwin
Paare neu geschrieben. Anstatt zu versuchen , eine mit Android kompatible Umgebung bereitzustellen und eine Umgebung zum Erstellen nativer Software bereitzustellen , die jedoch eng mit den verwendeten Build-Tools verknüpft ist , wird auch eine mit Android kompatible Umgebung bereitgestellt , da sie tatsächlich darauf basiert . Darüber hinaus ermöglicht die Bereitstellung der minimalen Shell, die für den internetbasierten Betrieb und andere Build-Systeme erforderlich ist, dass transplantierte Programme lokal im Internet ausgeführt werden können , ohne dass die Arbeit unnötig dupliziert wird , was auch die Menge der bereitgestellten Simulationssoftware extrem gering macht.MinGW-w64
MSYS
Cygwin
Windows
POSXI
MSYS2
Windows
GUN
Unix
Cygwin
POSIX
MSYS2
AutoTools
Unix
Windows
MSYS2
Cygwin
POSIX
1.2 MSYS2-Installation
MSYS2
Die Download-Adresse lautet https://www.msys2.org
- Installieren
MSYS2
- Dieser Artikel wird
MSYS2
auf der Festplatte installiertD
. Standardmäßig wird er aufC
der Festplatte installiert.
- Nach Abschluss der Installation wird die Umgebung
MSYS2
automatisch geöffnetMSYS2 UCR64
MSYS2
Es werden mehrere Umgebungen installiert. Die am häufigsten verwendeten sind die folgenden:
1.3 Integrieren Sie die Hauptumgebung von MSYS2 in Windows Terminal
- Dieser Schritt ist nicht notwendig, aber der damit verbundene Schritt
Terminal
ist nicht schön und umständlich zu bewältigen. - Geänderte
Windows Terminal
Konfigurationsdatei
- Fügen Sie
MSYS2 UCRT64
MSYS2 MSYS
MSYS2 MINGW64
MSYS2 MINGW32
MSYS2 CLANG64
MSYS2 CLANG32
die entsprechende Konfiguration zurWindows Terminal
Konfigurationsdatei hinzu
{
"commandline": "D:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell zsh",
"font":
{
"face": "JetBrainsMonoMedium Nerd Font Mono",
"size": 11.0
},
"guid": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
"icon": "D:/msys64/ucrt64.ico",
"name": "UCRT64 / MSYS2",
"startingDirectory": "D:/msys64/home/%USERNAME%"
},
{
"commandline": "D:/msys64/msys2_shell.cmd -defterm -here -no-start -msys -shell zsh",
"font":
{
"face": "JetBrainsMonoMedium Nerd Font Mono",
"size": 11.0
},
"guid": "{71160544-14d8-4194-af25-d05feeac7233}",
"icon": "D:/msys64/msys2.ico",
"name": "MSYS / MSYS2",
"startingDirectory": "D:/msys64/home/%USERNAME%"
},
{
"commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -mingw64 -shell zsh",
"font":
{
"face": "JetBrainsMonoMedium Nerd Font Mono",
"size": 11.0
},
"guid": "{4e0ab8a5-5f6b-49db-aab8-96814453d0e7}",
"icon": "D:/msys64/mingw64.ico",
"name": "MINGW64 / MSYS2",
"startingDirectory": "D:/msys64/home/%USERNAME%"
},
{
"commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -mingw32 -shell zsh",
"font":
{
"face": "JetBrainsMonoMedium Nerd Font Mono",
"size": 11.0
},
"guid": "{32bbe7b5-eae3-4092-b208-14cc3848f8cb}",
"icon": "D:/msys64/mingw32.ico",
"name": "MINGW32 / MSYS2",
"startingDirectory": "D:/msys64/home/%USERNAME%"
},
{
"commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -clangarm64 -shell zsh",
"font":
{
"face": "JetBrainsMonoMedium Nerd Font Mono",
"size": 11.0
},
"guid": "{e0c72876-abfe-494f-8fec-bba6a95087eb}",
"icon": "D:/msys64/clangarm64.ico",
"name": "CLANGARM64 / MSYS2",
"startingDirectory": "D:/msys64/home/%USERNAME%"
},
{
"commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -clang64 -shell zsh",
"font":
{
"face": "JetBrainsMonoMedium Nerd Font Mono",
"size": 11.0
},
"guid": "{53c79562-9bac-46e3-b847-0abeae40908d}",
"icon": "D:/msys64/clang64.ico",
"name": "CLANG64 / MSYS2",
"startingDirectory": "D:/msys64/home/%USERNAME%"
},
{
"commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -clang64 -shell zsh",
"font":
{
"face": "JetBrainsMonoMedium Nerd Font Mono",
"size": 11.0
},
"guid": "{d1d362aa-ea7c-4cc9-90ac-14ae810089e2}",
"hidden": false,
"icon": "D:\\msys64\\clang32.ico",
"name": "CLANG32 / MSYS2",
"startingDirectory": "D:/msys64/home/%USERNAME%"
}
- Wirkung
- Über
msys2_shell.cmd
Parametereinstellungen
Durch
msys2_shell.cmd
Festlegen von Parametern können SieMSYS2
den Start verschiedener Umgebungstypenshell
und die zugehörigen Standardeinstellungen steuern.
-defterm
:MSYS2
Nach dem Start das Standardterminal des Systems verwenden
-here
:MSYS2
Geben Sie nach dem Öffnen der Umgebung die Umgebung ein, in der der aktuelle Befehl ausgeführt wird. Wenn dieser Parameter nicht angegeben ist, wird standardmäßig das Verzeichnis eingegebenHOME
:
-where
Sie könnenMSYS2
den Ordner angeben, der nach dem Öffnen eingegeben werden soll
-use-full-path(-full-path)
: Fügen Sie das GanzeWindows
zurPATH
UmgebungMSYS2
hinzu
-no-start
: Direkt im aktuellen Das Terminal betrittMSYS2
die Umgebung und startet nicht mehrMSYS2
das integrierte Terminalprogramm :
-shell
Geben Sie denMSYS2
Standardinterpretertyp der Umgebung anshell
- Über
HOME
Verzeichniseinstellungen
MSYS2
home
Manchmal ist es notwendig , den Speicherort des Verzeichnisses anzugeben , abermsys2_shell.cmd
es gibt keine solche Option .
UmHOME
das Verzeichnis festzulegen, gibt es derzeit zwei Optionen: Eine besteht darin, die Datei zu ändernmsys2_shell.cmd
, und die andere besteht darin, die Parametermsys2_shell.cmd
von und die Parameter von zu verwenden-here
Windows Terminal
startingDirectory
- Methode eins
D:\\msys64\\msys2_shell.cmd -no-start -use-full-path -here -ucrt64 set "HOME=%USERPROFILE%"
- Methode Zwei
"commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell zsh"
"startingDirectory": "D:/msys64/home/%USERNAME%"
- integriert
Oh My Zsh
Dieser Artikel
Oh My Zsh
installiert es nur und optimiert es nicht.
pacman -Su zsh git
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
1.4 MSYS2-Betriebsumgebung und Pacman-Paketverwaltung
MSYS2
Betriebsumgebung
MSYS2
Es besteht tatsächlich aus 7 unabhängigen Unterumgebungen. Jede Unterumgebung verfügt über einen separaten Ordner und einen dedizierten Befehlszeilenschnittstelleneingang. Der Unterschied zwischen verschiedenen Umgebungen besteht hauptsächlich in der Basisbibliothek, auf der sie basieren. Im AllgemeinenUCRT64
reicht die direkte Verwendung aus. Es wird empfohlen,UCRT64
das Fenster zu öffnen unducrt64
die vorangestellte Software für die Installation auszuwählen.
MSYS2
Die Unterschiede in verschiedenen Umgebungen spiegeln sich hauptsächlich in den folgenden Aspekten wider:
- Pfadpräfix: Da
msys2
es sich um eine Mischung aus mehreren Umgebungen handelt, können mehreregcc
solcher Programme gleichzeitig vorhanden sein. Verwenden Sie daher das Pfadpräfix, um sie zu unterscheiden.Toolchain
: Es handelt sich um eine Reihe von Standardkompilierungsketten, wiearch
obenbase-devel
undubuntu
obenbuild-essential
- Architektur: 64 und 32 Bit
C
Bibliothek:C
Die Standardbibliothek der Sprache, bestimmt durch die UmgebungC++
Bibliothek:C++
Standardbibliothek, bestimmt vom CompilerDie spezifischen Unterschiede zwischen verschiedenen Umgebungen sind wie folgt:
msys2
: Dies istmsys2
die Basisumgebung, einschließlich verschiedenerlinux
Befehlszeilentools (z.pacman
B. usw.), und andere Unterumgebungen erben davon. Die in dieser Unterumgebung kompilierten Programme sind jedoch aufMSYS2
die dynamische Bibliothek angewiesen, und die kompilierten Tools dienenmsys
der Bereitstellung selbst oder den Entwicklern selbst. Beispielsweisevim
wird der Editor häufig selbst kompiliert und verwendet.msys
Es reicht aus, nur die bereitzustellen Version. Es wird nicht empfohlen, es für irgendetwas zu verwenden.pacman
Alles andere als die Paketverwaltungmingw64 & mingw32
: Im Zeitalter der vollständigen 32-Bit-Version ist es einfacher, esmingw32
basierend aufmsvcrt
( ) zu verwendenMicrosoft Visual C++ Runtime
als (was eine Reihe unterstützender Bibliotheken erfordert) und kann direkt darunter ausgeführt werden. Später wurde 64-Bit zum Mainstream. Basierend auf mingw32 war die Paketaktualisierung zu langsam und der Updater von und war auch sehr schwierig zu verwenden, sodass er zur Verwaltung jedes Pakets herausgebracht wurde .cygwin
Windows
mingw64
w32
w64
msys2
pacman
- ucrt64:
Visual Studio
Der neue Favorit, der vollständige Name lautetUniversal C Runtime
, wird verwendet, um den vorherigen zumingw64&w32
ersetzenmsvcrt
.ucrt
Geladene Produkte werden nicht unterstütztmsvcrt
, daherWindows(<10)
sind ältere Versionen nicht direkt mitmsvcrt
darauf basierender Software kompatibel. Das ist nicht unangemessen radikal. Sie müssen wissen, dassmsvcrt
die aktuelle Entwicklungsumgebung (nativ)C99
und nicht unterstütztUTF8
clang64 & clang64
: Verwenden SieLLVM
die Toolkette anstelleGCC
der Toolkette. Alle unterstützenden Umgebungen basieren daraufLLVM
. Tatsächlichmingw64/w32
ist es auch darin enthaltentoolchain
, aber es ist nicht die Standardeinstellung. Hier wird es als Standard herausgenommen und basiertucrt
darauf.clangarm64
: Wird zurAndroid
Programmkompilierung verwendet
Name | Präfix | Werkzeugkette | Die Architektur | C-Bibliothek | C++-Bibliothek |
---|---|---|---|---|---|
MSYS | /usr | gcc | x86_64 | Huhn | libstdc++ |
UCRT64 | /ucrt64 | gcc | x86_64 | ucrt | libstdc++ |
CLANG64 | /clang64 | llvm | x86_64 | ucrt | libc++ |
CLANGARM64 | /clangarm64 | llvm | aarch64 | ucrt | libc++ |
CLANG32 | /clang32 | llvm | i686 | ucrt | libc++ |
MINGW64 | /mingw64 | gcc | x86_64 | msvcrt | libstdc++ |
MINGW32 | /mingw32 | gcc | i686 | msvcrt | libstdc++ |
MSYS2
ArchLinux
Das Paketverwaltungstool wirdpacman
zum Verwalten von Softwarepaketen verwendet .pacman
Die Quellen verwalteter SoftwarepaketeMSYS2
variieren je nach Umgebung.MSYS2
Es werden sieben Umgebungen bereitgestellt. Dementsprechend gibt es Softwarepakete und sieben verschiedene Quellen
zum Verwalten verschiedener Softwarequellen. Der Speicherort der Konfigurationsdatei Ist:/etc/pacman.d/
pacman
Die Beziehung zwischen Softwarepaketen undMSYS2
Umgebungen
Da
pacman
Softwarequellen aus mehreren verschiedenen Umgebungen gleichzeitig verwaltet werden, müssen Sie bei der Installation und Deinstallation von Software den vollständigen Namen des Softwarepakets angeben, um die Software in der entsprechenden Umgebung zu installieren oder die Software aus der entsprechenden Umgebung zu löschen; wenn der Name des Softwarepakets angegeben ist unvollständig ist, wird die Software standardmäßig in der Umgebung installiert .MSYS
Angenommen , der Softwarename in der Hauptumgebung lautet : : : :gcc
MSYS
gcc
mingw64
mingw-w64-x86_64-gcc
mingw32
mingw-w64-i686-gcc
ucrt64
mingw-w64-ucrt-x86_64-gcc
pacman
Allgemeine Befehle
pacman -Sy
: Laden Sie die neue Softwarepaketdatenbank vom Server herunter (laden Sie tatsächlich die neueste Softwareliste vom Remote-Warehouse auf das lokale herunter)
pacman -Syu
. : Aktualisieren Sie das System und die gesamte installierte Software.
pacman -S <package>
: Software installieren. Sie können auch mehrere Pakete gleichzeitig installieren. Trennen Sie dazu einfach die Paketnamen durch Leerzeichen.
pacman -Rs <package>
: Löschen Sie die Software und löschen Sie auch die Software auf diesem Computer, von der nur die Software abhängt.
pacman -Ru <package>
: Entfernen Sie Software und entfernen Sie auch Abhängigkeiten, die von keiner Software mehr benötigt werden.
pacman -Ssq <key words>
: Suchen Sie im Warehouse nach Softwarepaketen, die Schlüsselwörter enthalten, und zeigen Sie diese übersichtlich an.
pacman -Qs <key words>
: Nach installierten Paketen suchen.
pacman -Qi <package>
: Informationen zu einem Softwarepaket anzeigen und detaillierte Informationen wie Softwareeinführung, Architektur, Abhängigkeiten, Größe usw. anzeigen.
pacman -Sg
: Alle Paketgruppen im Software-Repository auflisten.
pacman -Sg
Softwarepaketgruppe: Alle in einer Softwarepaketgruppe enthaltenen Softwarepakete anzeigen.
pacman -Sc
: Bereinigen Sie deinstallierte Paketdateien, die sich im/var/cache/pacman/pkg/
Verzeichnis befinden.
pacman -Scc
: Alle Cache-Dateien löschen
1.5 Der klassische Weg, eine C/C++-Umgebung aufzubauen
Die sogenannte klassische Methode bezieht sich hauptsächlich auf zwei Punkte
- Die von der auf diese Weise installierten
C/C++
Umgebung verwendeten Bibliotheken sindWindows
klassischemsvcrt
Bibliotheken.- Diese Installationsmethode ist komplizierter und mechanischer.
- Offen
MSYS2 UTRC64
- Paketdatenbank und Basispakete aktualisieren
pacman -Syu
- Es wird in der Mitte unterbrochen. Bitte öffnen Sie es erneut
MSYS2 UCRT64
und fahren Sie mit dem vorherigen Update fort.
pacman -Su
pacman -Sy
- Installieren
GCC
undG++
Installation auf 32-Bit-Systemen. Installation
mingw-w64-i686-gcc
auf 64-Bit-Systemenmingw-w64-x86_64-gcc
pacman -S mingw-w64-i686-gcc
pacman -S mingw-w64-x86_64-gcc
- Installieren
Debugger
Installation auf 32-Bit-Systemen. Installation
mingw-w64-i686-gdb
auf 64-Bit-Systemenmingw-w64-x86_64-gdb
pacman -S mingw-w64-i686-gdb
pacman -S mingw-w64-x86_64-gdb
- Fügen Sie den Compiler zu den Systemumgebungsvariablen hinzu
Achten Sie darauf, zwischen 64- und 32-Bit-Dateipfaden zu unterscheiden
Suchen Sie den entsprechenden
bin
Ordner
Ordnerpfad kopieren
- 32-Bit:
D:\msys64\mingw32\bin
- 64-Bit:
D:\msys64\mingw64\bin
Umgebungsvariablen hinzufügen
- Testen Sie
GCC
, ob die Installation erfolgreich ist
gcc --version
1.6 Verwenden Sie ToolChain, um eine C/C++-Umgebung zu erstellen
In diesem Artikel wird diese Methode hauptsächlich beim Umgebungsaufbau
UCRT64
der Umgebung usw. in anderen Umgebungen verwendet . Mit diesem Befehl werden , und andere Kompilierungstools gepackt und installiert und im Verzeichnis installiert. Dies ist die Installation eines virtuellen Pakets Methode, die hauptsächlich zum Installieren von Softwaresammlungen verwendet wird. Für andere Vorgänge wie Löschen usw. muss der tatsächliche Name des Softwarepakets verwendet werden. Der Name des Softwarepakets in der Umgebung lautet:C/C++
gcc
gdb
make
D:\msys64\ucrt64\bin
pacman
MINGW64
mingw-w64-x86_64-toolchain
pacman -Syu
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
- Fügen Sie den
UCRT64
Ordnerbin
zu Umgebungsvariablen hinzu
UCRT64
Derbin
Ordnerpfad lautet:D:\msys64\ucrt64\bin
- Testumgebung
GCC
_
gcc --version
g++ --version
gdb --version
2. Installation und Konfiguration von Neovim
2.1 Neovim-Installation
winget
Installieren Sie mitNeovim
winget search neovim
winget install Neovim.Neovim
Packer
Zur Plugin-Verwaltung installieren
git clone https://github.com/wbthomason/packer.nvim "$env:LOCALAPPDATA\nvim-data\site\pack\packer\start\packer.nvim"
2.2 Neovim konfigurieren
- Verzeichnisaufbau
plugin
undpacker_compiled.lua
werdenPacker
nach der Initialisierung automatisch generiert.
nvim
├── init.lua
├── lua
│ ├── configs
│ │ ├── autopairs.lua
│ │ ├── cmp.lua
│ │ ├── gitsigns.lua
│ │ ├── kanagawa.lua
│ │ ├── lsp.lua
│ │ ├── lualine.lua
│ │ ├── mason-lsp.lua
│ │ ├── null-ls.lua
│ │ ├── toggleterm.lua
│ │ ├── transparent.lua
│ │ └── treesitter.lua
│ ├── maps.lua
│ ├── plugins.lua
│ └── settings.lua
└── plugin
└── packer_compiled.lua
- Umweltanforderungen
NerdFonts
Neovim
> 0,8,0NodeJS with npm
C/C++
UmfeldGit
init.lua
Datei erstellen
mkdir nvim
cd nvim
vim init.lua
init.lua
require("settings")
require("plugins")
require("maps")
local themeStatus, kanagawa = pcall(require, "kanagawa")
if themeStatus then
vim.cmd("colorscheme kanagawa")
else
return
end
- Editoreinstellungen hinzufügen
mkdir lua
cd lua
vim settings.lua
settings.lua
local global = vim.g
local o = vim.o
vim.scriptencoding = "utf-8"
-- Map <leader> = the space key
global.mapleader = " "
global.maplocalleader = " "
-- Editor option
o.number = true
o.relativenumber = true
o.clipboard = "unnamedplus"
o.syntax = "on"
o.autoindent = true
o.cursorline = true
o.expandtab = true
o.shiftwidth = 2
o.tabstop = 2
o.encoding = "utf-8"
o.ruler = true
o.mouse = "a"
o.title = true
o.hidden = true
o.ttimeoutlen = 0
o.wildmenu = true
o.showcmd = true
o.showmatch = true
o.inccommand = "split"
o.splitbelow = true
o.splitright = true
o.termguicolors = true
- Plugin-Einstellungen hinzufügen
cd lua
vim plugins.lua
plugins.lua
-- Automatically run: PackerComplie
vim.api.nvim_create_autocmd("BufWritePost", {
group = vim.api.nvim_create_augroup("PACKER", { clear = true }),
pattern = "plugins.lua",
command = "source <afile> | PackerCompile",
})
return require("packer").startup(function(use)
-- Packer
use("wbthomason/packer.nvim")
-- Common utilities
use("nvim-lua/plenary.nvim")
-- Icons
use("nvim-tree/nvim-web-devicons")
-- Colorschema
use("rebelot/kanagawa.nvim")
-- Statusline
use({
"nvim-lualine/lualine.nvim",
event = "BufEnter",
config = function()
require("configs.lualine")
end,
requires = { "nvim-web-devicons" },
})
-- Treesitter
use({
"nvim-treesitter/nvim-treesitter",
run = function()
require("configs.treesitter")
end,
})
use({ "windwp/nvim-ts-autotag", after = "nvim-treesitter" })
-- Telescope
use({
"nvim-telescope/telescope.nvim",
tag = "0.1.1",
requires = { { "nvim-lua/plenary.nvim" } },
})
--LSP
use({
"neovim/nvim-lspconfig",
config = function()
require("configs.lsp")
end,
})
use("onsails/lspkind-nvim")
use({
"L3MON4D3/LuaSnip",
tag = "v<CurrentMajor>.*",
})
-- cmp: Autocomplete
use({
"hrsh7th/nvim-cmp",
event = "InsertEnter",
config = function()
require("configs.cmp")
end,
})
use("hrsh7th/cmp-nvim-lsp")
use({ "hrsh7th/cmp-path", after = "nvim-cmp" })
use({ "hrsh7th/cmp-buffer", after = "nvim-cmp" })
-- LSP diagnosticsm, code actions, and more via lua
use({
"jose-elias-alvarez/null-ls.nvim",
config = function()
require("configs.null-ls")
end,
requires = { "nvim-lua/plenary.nvim" },
})
-- Mason: Portable package manager
use({
"williamboman/mason.nvim",
config = function()
require("mason").setup()
end,
})
use({
"williamboman/mason-lspconfig.nvim",
config = function()
require("configs.mason-lsp")
end,
after = "mason.nvim",
})
-- File manager
use({
"nvim-neo-tree/neo-tree.nvim",
branch = "v2.x",
requires = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
},
})
-- Show colors
use({
"norcalli/nvim-colorizer.lua",
config = function()
require("colorizer").setup({ "*" })
end,
})
-- Terminal
use({
"akinsho/toggleterm.nvim",
tag = "*",
config = function()
require("configs.toggleterm")
end,
})
-- Git
use({
"lewis6991/gitsigns.nvim",
config = function()
require("configs.gitsigns")
end,
})
-- Markdown Preview
use({
"iamcco/markdown-preview.nvim",
run = function()
vim.fn["mkdp#utl#install"]()
end,
})
-- autopairs
use({
"windwp/nvim-autopairs",
config = function()
require("configs.autopairs")
end,
})
-- Backgroud Transparent
use({
"xiyaowong/nvim-transparent",
config = function()
require("configs.transparent")
end,
})
end)
- Fügen Sie Plugin-Parametereinstellungen hinzu
mkdir configs
cd configs
vim autopairs.lua
vim cmp.lua
vim gitsigns.lua
vim kanagawa.lua
vim lsp.lua
vim lualine.lua
vim mason-lsp.lua
vim null-ls.lua
vim toggleterm.lua
vim treesitter.lua
autopairs.lua
local status, autopairs = pcall(require, "nvim-autopairs")
if not status then
return
end
autopairs.setup({
diable_filetype = { "TelescopePrompt", "vim" },
})
cmp.lua
local status, cmp = pcall(require, "cmp")
if not status then
return
end
local lspkind = require("lspkind")
cmp.setup({
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-d>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.close(),
["<CR>"] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Replace,
select = true,
}),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "buffer" },
}),
})
vim.cmd([[
set completeopt=menuone,noinsert,noselect
highlight! default link CmpItemKind CmpItemMenuDefault
]])
gitsigns.lua
local status, gitsigns = pcall(require, "gitsigns")
if not status then
return
end
gitsigns.setup({
signs = {
add = { text = "│" },
change = { text = "│" },
delete = { text = "_" },
topdelete = { text = "‾" },
changedelete = { text = "~" },
untracked = { text = "┆" },
},
signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
watch_gitdir = {
interval = 1000,
follow_files = true,
},
attach_to_untracked = true,
current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
current_line_blame_opts = {
virt_text = true,
virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
delay = 1000,
ignore_whitespace = false,
},
current_line_blame_formatter = "<author>, <author_time:%Y-%m-%d> - <summary>",
sign_priority = 6,
update_debounce = 100,
status_formatter = nil, -- Use default
max_file_length = 40000, -- Disable if file is longer than this (in lines)
preview_config = {
-- Options passed to nvim_open_win
border = "single",
style = "minimal",
relative = "cursor",
row = 0,
col = 1,
},
yadm = {
enable = false,
},
})
kanagawa.lua
local status, kanagawa = pcall(require, "kanagawa")
if not status then
return
end
kanagawa.setup({
undercurl = true, -- enable undercurls
commentStyle = { italic = true },
functionStyle = {},
keywordStyle = { italic = true },
statementStyle = { bold = true },
typeStyle = {},
variablebuiltinStyle = { italic = true },
specialReturn = true, -- special highlight for the return keyword
specialException = true, -- special highlight for exception handling keywords
transparent = false, -- do not set background color
dimInactive = false, -- dim inactive window `:h hl-NormalNC`
globalStatus = false, -- adjust window separators highlight for laststatus=3
terminalColors = true, -- define vim.g.terminal_color_{0,17}
colors = {},
overrides = {},
theme = "default", -- Load "default" theme or the experimental "light" theme
})
lsp.lua
local status, nvim_lsp = pcall(require, "lspconfig")
if not status then
return
end
local protocol = require("vim.lsp.protocol")
local on_attach = function(client, bufnr)
-- format on save
if client.server_capabilities.documentFormattingProvider then
vim.api.nvim_create_autocmd("BufWritePre", {
group = vim.api.nvim_create_augroup("Format", { clear = true }),
buffer = bufnr,
callback = function()
vim.lsp.buf.formatting_seq_sync()
end,
})
end
end
local capabilities = require("cmp_nvim_lsp").default_capabilities()
-- TypeScript
nvim_lsp.tsserver.setup({
on_attach = on_attach,
capabilities = capabilities,
})
-- CSS
nvim_lsp.cssls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
-- Tailwind
nvim_lsp.tailwindcss.setup({
on_attach = on_attach,
capabilities = capabilities,
})
-- HTML
nvim_lsp.html.setup({
on_attach = on_attach,
capabilities = capabilities,
})
-- JSON
nvim_lsp.jsonls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
-- Eslint
nvim_lsp.eslint.setup({
on_attach = on_attach,
capabilities = capabilities,
})
-- Python
nvim_lsp.pyright.setup({
on_attach = on_attach,
capabilities = capabilities,
})
vim lualine.lua
local status, lualine = pcall(require, "lualine")
if not status then
return
end
lualine.setup({
options = {
icons_enabled = true,
theme = "powerline",
component_separators = { left = "", right = "" },
section_separators = { left = "", right = "" },
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
},
},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch", "diff", "diagnostics" },
lualine_c = { "filename" },
lualine_x = { "encoding", "fileformat", "filetype" },
lualine_y = { "progress" },
lualine_z = { "location" },
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { "filename" },
lualine_x = { "location" },
lualine_y = {},
lualine_z = {},
},
tabline = {},
winbar = {},
inactive_winbar = {},
extensions = {},
})
mason-lsp.lua
local status, masonlsp = pcall(require, "mason-lspconfig")
if not status then
return
end
masonlsp.setup({
automatic_installation = true,
ensure_installed = {
"cssls",
"eslint",
"html",
"jsonls",
"tsserver",
"pyright",
"tailwindcss",
},
})
null-ls.lua
local status, nls = pcall(require, "null-ls")
if not status then
return
end
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
local fmt = nls.builtins.formatting
local dgn = nls.builtins.diagnostics
local cda = nls.builtins.code_actions
nls.setup({
sources = {
-- Formatting
fmt.prettierd,
fmt.eslint_d,
fmt.prettier.with({
filetypes = { "html", "json", "yaml", "markdown", "javascript", "typescript" },
}),
fmt.stylua,
fmt.rustfmt,
-- Diagnostics
dgn.eslint_d,
dgn.shellcheck,
dgn.pylint.with({
method = nls.methods.DIAGNOSTICS_ON_SAVE,
}),
-- Code Actions
cda.eslint_d,
cda.shellcheck,
},
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({ bufnr = bufnr })
end,
})
end
end,
})
toggleterm.lua
local status, toggleterm = pcall(require, "toggleterm")
if not status then
return
end
toggleterm.setup({
size = 10,
open_mapping = [[<F7>]],
shading_factor = 2,
direction = "float",
float_opts = {
border = "curved",
highlights = {
border = "Normal",
background = "Normal",
},
},
})
treesitter.lua
local status, ts = pcall(require, "nvim-treesitter.configs")
if not status then
return
end
ts.setup({
highlight = {
enable = true,
additional_vim_regex_highlighting = false,
},
context_commentstring = {
enable = true,
enable_autocmd = false,
},
ensure_installed = {
"markdown",
"tsx",
"typescript",
"javascript",
"toml",
"c_sharp",
"json",
"yaml",
"rust",
"css",
"html",
"lua",
},
rainbow = {
enable = true,
disable = { "html" },
extended_mode = false,
max_file_lines = nil,
},
autotag = { enable = true },
incremental_selection = { enable = true },
indent = { enable = true },
})
local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
parser_config.tsx.filetype_to_parsername = { "javascript", "typescript.tsx" }
- PIugin installieren
Verwenden Sie nach der Eingabe
Neovim
den Befehl:PackerSync
- Legen Sie Tastenkombinationen fest
cd lua
vim maps.lua
maps.lua
local function map(mode, lhs, rhs)
vim.keymap.set(mode, lhs, rhs, { silent = true })
end
local status, telescope = pcall(require, "telescope.builtin")
if status then
-- telescope
map("n", "<leader>ff", telescope.find_files)
map("n", "<leader>fg", telescope.live_grep)
map("n", "<leader>fb", telescope.buffers)
map("n", "<leader>fh", telescope.help_tags)
map("n", "<leader>fs", telescope.git_status)
map("n", "<leader>fc", telescope.git_commits)
else
print("Telexcope not found")
end
-- Save
map("n", "<leader>w", "<CMD>update<CR>")
-- Quit
map("n", "<leader>q", "<CMD>q<CR>")
-- Exit insert mode
map("i", "jk", "<ESC>")
-- Windows
map("n", "<leader>ñ", "<CMD>vsplit<CR>")
map("n", "<leader>n", "<CMD>split<CR>")
-- Neotree
map("n", "<leader>e", "<CMD>Neotree toggle<CR>")
map("n", "<leader>o", "<CMD>Neotree focus<CR>")
-- buffer
map("n", "<TAB>", "<CMD>bnext<CR>")
map("n", "<S-TAB>", "<CMD>bprevious<CR>")
-- Ternimal
map("n", "<leader>th", "<CMD>ToggleTerm size=10 direction=horizontal<CR>")
map("n", "<leader>tv", "<CMD>ToggleTerm size=80 direction=vertical<CR>")
-- Markdown Preview
map("n", "<leader>m", "<CMD>MarkdownPreview<CR>")
map("n", "<leader>mn", "<CMD>MarkdownPreviewStop<CR>")
-- Windows Navigation
map("n", "<C-h>", "<C-w>h")
map("n", "<C-l>", "<C-w>l")
map("n", "<C-k>", "<C-w>k")
map("n", "<C-j>", "<C-w>j")
-- Resize Windows
map("n", "<C-Left>", "<C-w><")
map("n", "<C-Right>", "<C-w>>")
map("n", "<C-Up>", "<C-w>+")
map("n", "<C-Down>", "<C-w>-")
3. Mögliche Komplikationen und Komplikationen
3.1 Befehl stylua ist nicht ausführbar (stellen Sie sicher, dass er installiert ist und sich in Ihrem $PATH befindet)
Um einzugeben
Neovim
, verwenden Sie den Befehl:MasonInstall stylua
Verweise
- Installation und Konfiguration von Neovim unter Windows 10
- Meine modernisierte Neovim-Konfiguration
- learn-neovim-lua
- Einführung und Verwendung von MSYS2
- So installieren Sie C- und C++-Compiler unter Windows
- Terminals-MSYS2
- Leitfaden zum Erstellen einer neuen C/C++-Umgebung (VSCode und MSYS2)
- Windows-Terminal msys2 hinzufügen
- MSYS2 + Windows Terminal + Oh My Zsh
- Detaillierte Erklärung des Pacman-Befehls
- Verwenden Sie msys2, um eine elegante Entwicklungsumgebung zu erstellen
- Einrichtung der MSYS2-Entwicklungsumgebung
- Neue Umgebung in msys2: Die neue Umgebung, die von msys2 eingeführt wurde
- Einrichtung der MSYS2-Entwicklungsumgebung
- GCC und MinGW-w64 für Windows
- Windows-Installation der msys2 gcc C++-Entwicklungsumgebung
- Installieren Sie gcc/clang über msys2/mingw unter Windows
- MSYS2 installiert gcc und erstellt die Umgebung
- Windows Terminal + MSYS2-Konfiguration
- Verwenden Sie Neovim, um eine coole IDE-Tastenkombinationskonfiguration zu erstellen
- Tastenkombinationsnotizen für einige Neovim-Plug-Ins
- eslint_d: Der Befehl eslint_d ist nicht ausführbar (stellen Sie sicher, dass er installiert ist und sich in Ihrem $PATH befindet).
- Machen Sie Neovim komfortabler beim Schreiben von Code
- Windows Terminal + MSYS2-Konfiguration
- slydragonn/dotfiles
- Kein C-Compiler gefunden
- Neovim Learning 1: Plug-in-Verwaltung und -Konfiguration
- Packer, der König der Plugin-Manager
- Präfixschlüssel für VIM-Studiennotizen (Leiter)
- Modernes Neovim-Konfigurations-(3)-Plugin-Management
- Verwaltung und Konfiguration des Neovim-Plug-Ins
- neovim-Konfigurationsplan im Jahr 2022
- nanofrog/learn-neovim-lua
- Konfiguration der Neovim-Tastenkombinationen
- nvim erstellt eine Entwicklungsumgebung, die zu Ihnen passt
- Neovim-Konfigurationspraxis: Erstellen Sie Ihre eigene IDE von 0 auf 1
- Alles, was Sie brauchen, um neovim mit Lua zu konfigurieren
- Dokumentation: ~/.local/share/nvim/site/pack oder ~/.config/nvim/pack ?
- Installation und Verwendung des Vim-Plug-Plug-Ins
- Zusammenfassung der vim-Konfiguration
- NeoVim-Aufstiegsprozess
- nvim-Konfigurationsdatei
- Machen Sie Ihr Neovim so leistungsstark wie eine IDE
- Neovim-Grundkonfiguration