vim文本编辑器相关用法

1. 引言

Vim,一个功能强大的文本编辑器,它在程序员和系统管理员中广受欢迎。Vim是Vi的增强版,提供了一系列高级功能,包括语法高亮、代码补全、多窗口编辑等。

2. Vim的安装

Vim的安装过程在不同的Linux发行版中略有不同。以下是一些主流Linux发行版的安装步骤,以及一些额外的配置建议。

2.1 在Ubuntu和Debian中的安装

Ubuntu和Debian用户可以通过APT包管理器轻松安装Vim。打开终端并输入以下命令:

sudo apt update
sudo apt install vim

如果你需要Vim的图形界面版本,可以安装vim-gtkvim-gnome(取决于你的桌面环境):

sudo apt install vim-gtk
# 或者
sudo apt install vim-gnome

2.2 在Fedora中的安装

Fedora用户可以使用DNF包管理器来安装Vim。在终端中输入:

sudo dnf update
sudo dnf install vim

2.3 在CentOS和RHEL中的安装

CentOS和RHEL用户可以使用YUM或DNF(CentOS 8及以后版本)包管理器安装Vim。在终端中输入:

sudo yum update
sudo yum install vim
# 或者在CentOS 8及以后版本使用
sudo dnf install vim

2.4 在Arch Linux和Manjaro中的安装

Arch Linux和Manjaro用户可以使用Pacman包管理器来安装Vim。在终端中输入:

sudo pacman -Syu
sudo pacman -S vim

2.5 安装Vim的增强版本

如果你需要Vim的增强版本,比如vim-nox,它不包含图形用户界面,但包含所有其他功能,你可以使用以下命令安装:

sudo apt install vim-nox  # 对于Debian/Ubuntu
sudo dnf install vim-nox  # 对于Fedora
sudo yum install vim-nox  # 对于CentOS/RHEL
sudo pacman -S vim-nox    # 对于Arch Linux/Manjaro

2.6 Vim的版本管理

如果你需要管理多个Vim版本或者想要安装最新版本的Vim,可以考虑使用版本管理工具,如nvim(Neovim),它是一个高度可扩展的Vim分支。

sudo apt install neovim  # 在Debian/Ubuntu中安装Neovim
sudo dnf install neovim   # 在Fedora中安装Neovim
sudo yum install neovim   # 在CentOS/RHEL中安装Neovim
sudo pacman -S neovim     # 在Arch Linux/Manjaro中安装Neovim

2.7 配置Vim

安装Vim后,你可能想要对其进行配置,以适应你的开发需求。创建或编辑你的.vimrc文件来自定义Vim:

vim ~/.vimrc

在这个文件中,你可以设置颜色方案、键绑定、插件等。

2.8 Vim插件管理

Vim的插件可以显著提高你的编辑效率。使用插件管理器如Vundle、Pathogen或vim-plug来安装和管理插件。例如,使用Vundle安装插件的步骤如下:

  1. 安装Vundle:
    git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
    
  2. 配置.vimrc以使用Vundle:
    set nocompatible              " 必须
    filetype off                  " 必须
    call vundle#begin('~/.vim/bundle/')Plugin 'VundleVim/Vundle.vim'
    " 其他插件
    Plugin 'tpope/vim-fugitive'call vundle#end()            " 必须
    filetype plugin indent on    " 必须
    
  3. 安装插件:
    vim +PluginInstall +qall
    

通过这些步骤,你可以在任何Linux发行版上安装Vim,并根据你的需要进行配置和定制。

3. Vim的基础概念

Vim是一个高度可定制的文本编辑器,它拥有多种模式,每种模式都提供了不同的功能。了解这些模式是掌握Vim的关键。

3.1 Vim的模式

3.1.1 普通模式(Normal Mode)

普通模式是Vim的默认模式,用于执行命令和导航。在这个模式下,你可以使用各种快捷键来移动光标、复制、粘贴、查找和替换文本等。

示例:

  • hjkl:分别向左、下、上、右移动光标。
  • gg:跳转到文件的第一行。
  • G:跳转到文件的最后一行。
3.1.2 插入模式(Insert Mode)

在普通模式下按下i键即可进入插入模式,这时可以开始输入文本。插入模式下,Vim的行为类似于其他文本编辑器。

示例:

  • i:进入插入模式,在光标位置前插入文本。
  • I:进入插入模式,在当前行的开头插入文本。
  • a:进入插入模式,在光标后插入文本。
  • A:进入插入模式,在当前行的末尾插入文本。
3.1.3 命令行模式(Command-line Mode)

命令行模式允许你输入命令来执行更复杂的操作,如保存文件、查找文本、替换文本等。

示例:

  • :w:保存文件。
  • :q:退出Vim。
  • :wq:保存文件并退出Vim。
  • /pattern:搜索指定的文本模式。
3.1.4 可视模式(Visual Mode)

可视模式允许你高亮并选择文本块,以便进行复制、删除或替换。

示例:

  • v:进入可视模式,选择字符。
  • V:进入可视行模式,选择整行。
  • Ctrl+v:进入可视块模式,选择列。

3.2 Vim的启动和退出

3.2.1 启动Vim

启动Vim并打开文件:

vim filename.txt

如果没有指定文件,Vim将启动一个空白窗口。

3.2.2 退出Vim

退出Vim有几种不同的方式:

  • :q:退出Vim。
  • :q!:不保存更改并退出Vim。
  • :wq:保存更改并退出Vim。
  • ZZ(大写Z两次):保存更改并退出Vim(快捷方式)。

3.3 Vim的窗口和标签

3.3.1 窗口分割

Vim允许你分割窗口,以便同时查看和编辑多个文件。

示例:

  • :split:sp:垂直分割窗口。
  • :vsplit:vsp:水平分割窗口。
3.3.2 标签页

使用标签页可以在Vim中打开多个文件,而不需要分割窗口。

示例:

  • :tabnew:tabnew filename:打开新标签页。
  • gt:切换到下一个标签页。
  • gT:切换到上一个标签页。

3.4 Vim的缓冲区

缓冲区是Vim用来存储打开文件的内存区域。你可以在缓冲区之间切换,而不需要关闭它们。

示例:

  • :ls:列出所有打开的缓冲区。
  • :bn:切换到下一个缓冲区。
  • :bp:切换到上一个缓冲区。

3.5 Vim的寄存器

Vim拥有多个寄存器,可以用来存储文本,以便在不同位置或文件中复制和粘贴。

示例:

  • 使用"+y复制当前行到系统剪贴板。
  • 使用"+p从系统剪贴板粘贴文本。

4. Vim界面和布局

Vim的界面虽然看起来简洁,但它提供了丰富的功能和定制选项。了解Vim的界面和布局有助于你更高效地使用这个强大的编辑器。

4.1 状态栏(Status Line)

状态栏位于窗口的底部,显示了当前文件的状态信息,如文件名、光标位置、文件状态等。

示例:

  • -- INSERT --:显示当前处于插入模式。
  • file.txt [+]:表示file.txt文件已被修改,需要保存。

4.2 命令行(Command-line)

命令行位于状态栏上方,用于输入命令、查找文本、执行宏等。

示例:

  • :e filename:在命令行模式下打开一个文件。
  • :%s/old/new/g:替换当前文件中所有的“old”为“new”。

4.3 缓冲区列表

缓冲区列表是Vim用来追踪所有打开文件的机制。

示例:

  • :ls:列出所有打开的缓冲区。
  • :bnext:bn:切换到下一个缓冲区。
  • :bprev:bp:切换到上一个缓冲区。

4.4 标签页(Tabs)

Vim允许你使用标签页来管理多个文件。

示例:

  • :tabnew filename:创建一个新标签页并打开filename
  • gt:跳转到下一个标签页。
  • gT:跳转到上一个标签页。

4.5 分割窗口(Split Windows)

Vim支持窗口分割,允许你同时查看和编辑多个文件。

示例:

  • :split或简写为:sp:垂直分割窗口。
  • :vsplit或简写为:vs:水平分割窗口。
  • Ctrl+w方向键:在分割的窗口间移动光标。

4.6 Vim的窗口布局(Window Layout)

你可以通过组合使用窗口分割和标签页来创建复杂的编辑布局。

示例:

  • :tabnew + :split:创建一个新的标签页,并在其中垂直分割窗口。
  • :vsplit + gt:水平分割当前窗口,并切换到下一个标签页。

4.7 状态栏定制(Customizing the Status Line)

状态栏可以被定制以显示更多有用的信息。

示例:

  • .vimrc中添加set statusline+=%f以显示当前文件名。
  • 使用%<, %h, %m, %r, %=, %{...}等来定制状态栏,显示文件路径、帮助信息、文件是否被修改等。

4.8 显示行号(Displaying Line Numbers)

显示行号有助于代码导航和引用。

示例:

  • :set number:在所有窗口中显示行号。
  • :set relativenumber:显示相对行号,当前行上方的行号为绝对值,下方为相对于当前行的偏移量。

4.9 Vim的语法高亮(Syntax Highlighting)

Vim支持语法高亮,帮助识别不同的编程语言元素。

示例:

  • :syntax on:开启语法高亮。
  • .vimrc中为特定文件类型设置高亮:autocmd FileType python setlocal syntax=on

4.10 Vim的折叠功能(Folding)

Vim的折叠功能允许你将代码块折叠起来,以便于查看和导航。

示例:

  • zf:创建一个折叠。
  • zM:折叠所有级别。
  • zR:展开所有折叠。

5. 基本操作

Vim的基本操作是掌握这个编辑器的关键。以下是一些基本操作的详细介绍和示例,帮助你快速上手。

5.1 光标移动

在普通模式下,Vim提供了多种方式来移动光标。

示例:

  • hjkl:分别向左、下、上、右移动光标。
  • 0:移动到当前行的开头。
  • $:移动到当前行的末尾。
  • gg:移动到文件的第一行。
  • G:移动到文件的最后一行。
  • {}:移动到段落的开始或结束。

5.2 文本选择

Vim的可视模式允许你选择文本块,然后执行复制、删除等操作。

示例:

  • v:进入可视模式,逐字符选择。
  • V:进入可视行模式,选择整行。
  • Ctrl+v:进入可视块模式,选择列。
  • o:在可视模式下,切换到选择区域的另一端。

5.3 文本插入和删除

在插入模式下,你可以添加或修改文本。在普通模式下,你可以删除或复制文本。

示例:

  • i:进入插入模式,在当前光标位置前插入。
  • I:进入插入模式,在当前行首插入。
  • a:进入插入模式,在当前光标后插入。
  • A:进入插入模式,在当前行末插入。
  • x:在普通模式下,删除当前光标下的字符。
  • dd:删除当前行。
  • D:删除从当前光标到行末的内容。

5.4 复制和粘贴文本

复制和粘贴是编辑文本时常用的操作。

示例:

  • yy:复制当前行。
  • p:在普通模式下,粘贴复制的内容到光标后。
  • P:粘贴复制的内容到光标前。
  • yw:复制一个单词。
  • yiw:在可视模式下复制当前光标下的单词。

5.5 撤销和重做

Vim允许你撤销和重做你的操作。

示例:

  • u:撤销上一个操作。
  • Ctrl+r:重做上一个撤销的操作。

5.6 查找和替换

Vim提供了强大的查找和替换功能。

示例:

  • /word:向下查找"word"。
  • ?word:向上查找"word"。
  • n:跳转到下一个匹配项。
  • N:跳转到上一个匹配项。
  • :s/old/new/g:替换当前行中的"old"为"new"。
  • :%s/old/new/g:替换整个文件中的"old"为"new"。

5.7 替换单个字符

在普通模式下,你可以替换单个字符。

示例:

  • r:替换当前光标下的字符。
  • R:进入替换模式,直到按下Esc

5.8 跳转到指定行

快速跳转到文件中的指定行。

示例:

  • :123:跳转到文件的第123行。

5.9 标记和跳转

Vim允许你设置标记并快速跳转。

示例:

  • ma:在当前位置设置一个名为a的标记。
  • ``a:跳转到标记a`的位置。
  • 'a:跳转到标记a所在行的行首。

5.10 缩进和对齐

Vim提供了缩进和对齐文本的功能。

示例:

  • >>:将当前行向右缩进。
  • <<:将当前行向左缩进。
  • =:自动对齐当前行。

6. 编辑文本

Vim提供了丰富的文本编辑功能,从简单的插入和删除到复杂的替换和格式化。以下是一些基本和高级文本编辑技巧的详细介绍和示例。

6.1 插入文本

在Vim中,有多种方式可以进入插入模式来插入文本。

示例:

  • i:进入插入模式,在当前光标位置插入。
  • I:进入插入模式,在当前行首插入。
  • a:进入插入模式,在当前光标后插入。
  • A:进入插入模式,在当前行末插入。
  • o:在当前行下方新开一行并进入插入模式。
  • O:在当前行上方新开一行并进入插入模式。

6.2 删除文本

Vim允许你以多种方式删除文本,从单个字符到整行。

示例:

  • x:删除当前光标下的字符。
  • dd:删除当前行。
  • dw:删除一个单词。
  • D:删除从当前光标到行末的内容。
  • d$:删除当前光标到行末的所有文本。
  • d0:删除当前光标到行首的所有文本。

6.3 替换文本

替换文本是编程和文本编辑中的常见任务。

示例:

  • r:替换当前光标下的单个字符。
  • R:进入替换模式,直到按下Esc
  • :s/old/new:替换当前行中第一个出现的"old"为"new"。
  • :s/old/new/g:替换当前行中所有出现的"old"为"new"。
  • :%s/old/new/g:替换整个文件中所有出现的"old"为"new"。

6.4 复制和粘贴文本

复制和粘贴文本是提高编辑效率的重要功能。

示例:

  • yy:复制当前行。
  • 2yy:复制当前光标下的两行。
  • yw:复制当前光标下的单词。
  • p:粘贴复制的内容到光标后。
  • P:粘贴复制的内容到光标前。
  • yank命令(需要插件支持):跨文件复制文本。

6.5 撤销和重做

Vim允许你撤销和重做操作,这是探索和实验时的救星。

示例:

  • u:撤销上一个操作。
  • Ctrl+r:重做上一个撤销的操作。

6.6 块操作

使用可视块模式可以对列进行编辑。

示例:

  • Ctrl+v:进入可视块模式。
  • 方向键:选择列。
  • y:复制选中的列。
  • d:删除选中的列。

6.7 替换字符

可以替换文本中的特定字符。

示例:

  • :%s/char1/char2/g:将文件中所有的char1替换为char2

6.8 替换整行

替换整行文本,而不仅仅是字符。

示例:

  • :s/^old/new/:将当前行以"old"开头的文本替换为"new"。

6.9 格式化文本

Vim提供了格式化文本的功能,这对于代码和文档编辑非常有用。

示例:

  • gq:格式化选中的文本或整行。
  • ggVGgq:格式化整个文件。

6.10 缩进和对齐

自动缩进和对齐文本,特别是代码,可以提高可读性。

**示例:``
=i`:对当前光标下的单词进行对齐。

  • ==:对当前行进行自动缩进。
  • gg=G:自动缩进整个文件。

6.11 插入模式下的多行编辑

在插入模式下,你可以执行一些特殊的命令来编辑多行。

示例:

  • Ctrl+t:在插入模式下,插入当前光标下的单词的下一个匹配项。
  • Ctrl+d:在插入模式下,插入当前光标下的单词的前一个匹配项。

7. 查找和替换

Vim的查找和替换功能是编辑文本时不可或缺的工具。它们可以帮助你快速定位文本,以及批量修改内容。

7.1 查找文本

Vim提供了多种查找文本的方法,包括正向查找和反向查找。

示例:

  • /word:向下查找“word”。
  • ?word:向上查找“word”。
  • n:跳转到下一个匹配项。
  • N:跳转到上一个匹配项。
  • *:查找当前光标下的单词,并向下跳转。
  • #:查找当前光标下的单词,并向上跳转。

7.2 高级查找

Vim的查找功能支持正则表达式,这使得查找更加灵活和强大。

示例:

  • /[0-9]:查找任意数字。
  • /\bword\b:查找完整单词“word”(避免部分匹配)。
  • /^The:查找以“The”开头的行。

7.3 查找并执行命令

结合查找和其他命令,可以执行更复杂的操作。

示例:

  • :%s//new/g:将文件中所有匹配的内容替换为“new”。
  • /word/:查找“word”,然后可以执行:'<,'+s/old/new/g来替换从当前匹配到下一个匹配之间的所有“old”为“new”。

7.4 替换文本

替换文本是编辑工作中的一个基本操作,Vim提供了强大的替换功能。

示例:

  • :s/old/new:替换当前行第一个出现的“old”为“new”。
  • :s/old/new/g:替换当前行所有出现的“old”为“new”。
  • :%s/old/new/g:替换整个文件中所有出现的“old”为“new”。

7.5 确认替换

在执行替换操作时,Vim可以逐个确认每个替换。

示例:

  • :%s/old/new/gc:替换整个文件中所有出现的“old”为“new”,并在替换前进行确认。

7.6 可视模式下的查找和替换

在可视模式下,你可以执行查找和替换操作,仅针对选定的文本。

示例:

  • 进入可视模式,选择文本,然后按:,Vim会提示输入命令,如s/old/new/g,仅替换选定文本中的“old”为“new”。

7.7 跨文件查找

Vim允许你在多个文件中查找文本。

示例:

  • :vimgrep /word/ **/*.txt:在当前目录及其子目录下的所有.txt文件中查找“word”。

7.8 查找历史

Vim保留了你的查找历史,你可以通过历史快速重新查找。

示例:

  • Ctrl+oCtrl+i:在跳转历史中前后导航。

7.9 查找并打开文件

结合查找和文件打开功能,可以快速定位并编辑文件。

示例:

  • :find filename:查找并打开名为“filename”的文件。

7.10 替换模式

Vim的替换模式允许你连续替换多个字符。

示例:

  • R:进入替换模式,替换字符直到按Esc

8. 故障排查和常见问题

在使用Vim的过程中,你可能会碰到一些常见的问题。以下是一些详细的故障排查步骤和示例,帮助你快速定位并解决问题。

8.1 Vim启动失败

如果Vim启动失败或行为异常,可能是因为配置文件错误或插件冲突。

示例:

  • 尝试启动vim -u NONE以不加载任何配置文件。
  • 检查~/.vimrc$VIMRUNTIME/vimrc文件是否存在语法错误。

8.2 插件管理问题

插件安装或更新后可能导致Vim出现问题。

示例:

  • 使用:PluginList查看所有已安装插件。
  • 尝试禁用或删除最近安装的插件,使用:PluginDisable <name>

8.3 性能问题

Vim响应慢或运行缓慢可能是由于性能问题。

示例:

  • 关闭语法高亮::set nosyntax
  • 减少打开的缓冲区数量::bufdo bdel删除未修改的缓冲区。

8.4 文件保存问题

有时Vim可能无法保存文件,尤其是当文件权限或磁盘空间问题时。

示例:

  • 检查文件权限:ls -l filename
  • 检查磁盘空间:df -h
  • 强制保存文件::w!

8.5 撤销历史问题

如果撤销操作出现问题,可能是因为撤销历史被意外修改或损坏。

示例:

  • 检查撤销历史设置::set undodir?
  • 尝试恢复撤销历史::undo <number>跳转到特定撤销级别。

8.6 查找和替换问题

查找和替换操作可能因为正则表达式错误或命令使用不当而失败。

示例:

  • 检查正则表达式是否正确:/pattern
  • 使用:help pattern查看正则表达式帮助。
  • 确认替换命令的正确性::%s/old/new/g

8.7 窗口分割问题

在使用窗口分割时可能会遇到问题,如无法分割或分割后的窗口无法正常使用。

示例:

  • 检查是否有映射或自动命令影响了窗口分割::map:autocmd
  • 使用:split:vsplit命令创建新窗口。

8.8 Vim脚本错误

自定义脚本或.vimrc配置错误可能导致Vim行为异常。

示例:

  • 使用:scriptnames查看所有已加载的脚本。
  • 使用:verbose set <option>?查看选项的来源。

8.9 Vim版本兼容性问题

不同版本的Vim之间可能存在功能差异,导致某些命令或插件不兼容。

示例:

  • 检查Vim版本::echo v:version
  • 查找特定功能或插件的最低版本要求。

8.10 通用故障排查技巧

  • 使用:messages查看错误和信息消息。
  • 使用:help <topic>搜索Vim的帮助文档。
  • 使用:verbose命令获取更详细的执行信息。

8.11 Vim启动慢

Vim启动慢可能是因为加载了太多插件或脚本。

示例:

  • 使用:verbo on查看启动时加载的所有脚本。
  • 使用:profile start:profile file命令分析启动性能。

8.12 Vim崩溃问题

Vim崩溃可能是由于内存不足或内部错误。

示例:

  • 检查系统日志,如/var/log/syslogdmesg
  • 使用:helpcrash-recovery查看Vim的崩溃恢复帮助。

8.13 Vim模式问题

有时Vim可能无法正确识别或切换模式。

示例:

  • 检查是否有映射影响了模式切换::map
  • 确保没有插件或脚本错误地修改了模式行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MapStruct高级用法

MapStruct高级用法 依赖注入&#xff08;Using dependency injection&#xff09; Mapper(componentModel SPRING) public interface SpringMapper {SpringMapper MAPPER Mappers.getMapper(SpringMapper.class);PersonDTO personDoToDTO(Person person); }public static fin…

【class18】人工智能初步----语音识别(4)

【class17】 上节课&#xff0c;我们学习了: 语音端点检测的相关概念&#xff0c;并通过代码切分和保存了音频。 本节课&#xff0c;我们将学习这些知识点&#xff1a;1. 序列到序列模型2. 循环神经网络3. 调用短语音识别接口 知其然&#xff0c;知其所以然 在调用语…

数组单调栈-901. 股票价格跨度、leetcode

单调栈作为一种数据结构在求解类递增、递减方面的题目中有较为广泛的应用&#xff0c;在以往的leetcode中所见到的相关单调栈的题目均为单一元素&#xff0c;今天刷到901题目时&#xff0c;想到了将数组元素作为单调栈中元素的方法进行求解。 题目链接及描述 901. 股票价格跨…

【c++leetcode】69. Sqrt(x)

问题入口 二分搜索 最困难的是能否意识到用二分搜索法解题。 算术平方根的区间在[1, x] 。代码如下&#xff1a; class Solution { public:int mySqrt(int x) {if (x 1 || x 0){return x;}int64_t start 1;int64_t end x;while (start < x){int64_t mid start (en…

开源模型应用落地-Gradio正确集成Fastapi-助力模型交互-实践篇(二)

一、前言 Gradio提供了直观的用户界面,当与Fastapi结合后,用户可以通过界面轻松地与模型进行交互,上传数据、获取推理结果等,使得交互性增强,提升了用户体验。 在开源大语言模型遍地开花的时代,正确的使用Gradio和Fastapi,通过两者的集成,使得模型的部署和使用过程更加…

以果决其行,只为文化的传承

从他们每一个人的身上&#xff0c;我们看到传神的东西&#xff0c;就是他们都能用结果&#xff0c;去指引自己前进的方向&#xff0c;这正是我要解读倪海厦老师的原因&#xff0c;看倪海厦2012年已经去世&#xff0c;到现在已经十几年时间了&#xff0c;但是我们看现在自学中医…

【Pandas】深入解析`pd.to_sql()`函数

【Pandas】深入解析pd.to_sql()函数 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1…

2024年第六届中青杯数学建模竞赛浅析

获取比赛资料&#xff0c;请关注gzh“小何数模”&#xff01; 本次中青杯数学建模的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&#xff0c;为了帮助大家…

JavaSE:StringBuilder和StringBuffer类

1、引言 在上一篇文章中&#xff0c;我们理解了字符串的常用方法&#xff0c;细心的同学大概已经发现&#xff0c;不管是将字符串中的字符转变为大写或小写&#xff0c;或是完成字符串的替换&#xff0c;又或是去除空白字符等等&#xff0c;只要涉及到字符串的修改&#xff0c…

【PB案例学习笔记】-10 进度条使用

写在前面 这是PB案例学习笔记系列文章的第10篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

Java用反射reflect来实例化对象: class.getDeclaredConstructor().newInstance()

Java用反射reflect来实例化对象: class.getDeclaredConstructor().newInstance() 从java9开始, class.newInstance()已过时, 被加上Deprecated强烈反对注解 SuppressWarnings("removal")CallerSensitiveDeprecated(since"9")public T newInstance()throws …

防止自动化攻击的最佳实践

防止自动化攻击的最佳实践 在当今的网络安全环境中&#xff0c;保护用户账户免受自动化攻击已成为每个网站和应用程序的重要任务。攻击者可以利用多种不同类型的自动化攻击来尝试破坏用户账户。本文将详细介绍常见的攻击类型及其防御机制&#xff0c;帮助您更好地保护用户账户…

C# ManualResetEvent的用法

在C#中&#xff0c;ManualResetEvent类是一个同步基元&#xff0c;用于控制多个线程的执行顺序。下面是一些ManualResetEvent类的常见用法&#xff1a; 等待一个事件的发生&#xff1a;可以使用ManualResetEvent的WaitOne方法来等待事件的发生。当事件被触发时&#xff0c;Wait…

adb 连接机顶盒命令

抓机顶盒日志的方法&#xff0c;使用此命令进行抓日志&#xff0c;个别无法抓日志的盒子可以使用此方法 1、安卓9.0版本查询命令 ps -ef |grep com.cm.webos.iptv 2、安卓4.4版本查询命令 ps |grep com.cm.webos.iptv 3、查询顺序&#xff1a;首先进入shell下进行操作 adb she…

C++青少年简明教程:for循环语句

C青少年简明教程&#xff1a;for循环语句 C的for循环语句是一种迭代控制语句&#xff0c;用于重复执行一段代码。 语法格式&#xff1a; for(表达式1&#xff1b;表达式2&#xff1b;表达式3) 循环体 for循环语句执行流程图&#xff1a; 不太好理解&#xff0c;请看下图&am…

VSCode配置Lua5.4安装

参考&#xff1a;VSCode 配置 Lua 开发环境(清晰明了)_lua vscode-CSDN博客 1.下载 Lua Binaries Download (sourceforge.net) 2.配置环境变量 解压放到某文件夹&#xff1a; 环境变量&#xff1a; 3.VSCode安装插件 4.配置 5.测试

Python | Leetcode Python题解之第116题填充每个节点的下一个右侧节点指针

题目&#xff1a; 题解&#xff1a; class Solution:def connect(self, root: Node) -> Node:if not root:return root# 从根节点开始leftmost rootwhile leftmost.left:# 遍历这一层节点组织成的链表&#xff0c;为下一层的节点更新 next 指针head leftmostwhile head:#…

快解析动态域名解析,实现外网访问内网数据库

今天跟大家分享一下如何借助快解析动态域名解析&#xff0c;在两种特定网络环境下&#xff0c;实现外网访问内网mysql数据库。 第1种网络环境&#xff1a;路由器分配的是动态公网IP&#xff0c;且有路由器登录管理权限。如何实现外网访问内网mysql数据库&#xff1f; 针对这种…

继承与Object

一.继承 Java语言的继承&#xff1a;单继承 1.类和类之间的关系 (1)组合关系 公司和员工&#xff0c;学校和学生 (2)继承关系 学生和人 二.Object类 public class Object {private static native void registerNatives();static {registerNatives();} 1.finalize() 对象…

FPGA时钟:驱动数字逻辑的核心

一、引言 在FPGA&#xff08;现场可编程门阵列&#xff09;设计中&#xff0c;时钟信号是不可或缺的关键要素。时钟信号作为时序逻辑的心跳&#xff0c;推动着FPGA内部各个存储单元的数据流转。无论是实现复杂的逻辑运算还是处理高速数据流&#xff0c;都需要精确的时钟信号来保…