星期二, 三月 24, 2020

VIM学习笔记 编译源码(Compile Code)-Java

秉承Java语言“一次编写,处处运行(write once, run anywhere)”的宗旨。Java程序需要虚拟机JVM(Java Virtual Machine)来负责解释执行,而并非操作系统。也就是说,需要针对不同的操作系统安装不同版本的运行环境JRE(Java Runtime Environment)来运行Java程序。

如果需要开发Java程序,那么则需要安装JDK (Java Development Kit),以完成下图所示的编译和执行过程。

Java-jvm-compile

以下操作在Fedora31下验证成功。在不同的操作系统中,以下命令和参数也可能略有不同,请根据实际情况进行调整。

安装Java

使用以下命令安装JDK(具体步骤可以参考Installing Java);

$ sudo dnf install java-1.8.0-openjdk-devel.x86_64

如果需要使用JWS(Java Web Start)以运行JNPL文件,那么还需要安装IcedTea-Web

$ sudo dnf install icedtea-web

配置Java

如果安装了多个版本的JDK、JRE、和JWS,那么可以使用以下命令进行切换:

$ alternatives --config java

alternatives--config-java

$ alternatives --config javac

$ alternatives --config javaws

测试Java

使用以下命令,查看当前Java版本:

$ java -version

java-version

使用以下命令,查看当前Javac版本:

$ javac -version

javac-version

使用以下命令,查看当前Javaws版本:

$ javaws http://nextmidas.techma.com/nxm343/htdocs/localshell.jnlp

您可以尝试打开本地的JNPL文件,或者使用IcedTea-Web-Tests提供的测试网址。

javaws-test

设置编译器

使用以下命令,设置'makeprg'选项为javac命令:

:set makeprg=javac\ %

通过在vimrc文件中增加以下自动命令,可以为Java语言文件设置编译快捷键:

augroup make_java
 au!
 au FileType java  set makeprg=set makeprg=javac\ %
 au FileType java  map <buffer> <leader><space> :w<cr>:make<cr>
augroup end

编译Java

使用以下命令,将根据'makeprg'选项进行编译,并生成与.java文件同名的.class字节码文件:

:make

如果编译出现错误,将在QuickFix中显示错误列表,并自动跳转到第一个错误处:

javac_error_quicklist

如果希望在编译时保持当前光标位置不变,那么可以使用以下命令:

:make!

使用:cw命令,将打开quickfix窗口。使用:cp命令,跳转到上一个错误;使用:cn命令,跳转到下一个错误。关于QuickFix操作的更多信息,请参阅QuickFix章节。

在修复错误并成功编译之后,将显示命令输出:

javac_success_output

使用以下命令,首先Java虚拟机将编译好的.class文件加载到内存,然后针对其中的Java类进行解释执行:

:!java %:r

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>

星期日, 三月 22, 2020

VIM学习笔记 编译源码(Compile Code)-C

以下操作在Fedora31下验证成功。在不同的操作系统中,以下命令和参数也可能略有不同,请根据实际情况进行调整。

设置编译器

使用以下命令,确认可以正常运行GCC编译器:

$ gcc --version

gcc_version_Linux

使用以下命令,设置'makeprg'选项为gcc命令:

:set makeprg=gcc\ -o\ %<\ %

编译源码

使用以下命令,将根据'makeprg'选项进行编译,并生成文件:

:make

如果编译出现错误,将在QuickFix中显示错误列表,并自动跳转到第一个错误处:

gcc_error_quicklist

如果希望在编译时保持当前光标位置不变,那么可以使用以下命令:

:make!

使用:cw命令,将打开quickfix窗口。使用:cp命令,跳转到上一个错误;使用:cn命令,跳转到下一个错误。关于QuickFix操作的更多信息,请参阅QuickFix章节。

使用:cl命令,可以列示所有错误信息:

gcc_error_quicklist_cl

在修复错误并成功编译之后,将显示命令输出:

gcc_success_output

使用以下命令,可以执行编译后的程序:

:!./%:r

配置编译环境

通过在vimrc文件中增加以下自动命令,可以为C语言文件设置编译快捷键:

augroup make_c
 au!
 au FileType c,cpp  set makeprg=gcc\ -o\ %<\ %
 au FileType c,cpp  map <buffer> <leader><space> :w<cr>:make<cr>
augroup end

如果不希望修改'makeprg'选项,那么可以定义快捷键来完成编译和执行程序的操作:

map <F8> :w <CR> :!gcc % -o %< && ./%< <CR>

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>

星期五, 三月 13, 2020

VIM学习笔记 网页开发-选择颜色(Select Color)

HTML-Editor插件

我在Christian J Robinson开发的HTML插件的基础之上,制作了HTML-Editor插件。使用:ColorSelect命令或者;#快捷键,可以在新建窗口中选取颜色。

HTML-Editor-cmd-ColorSelect

使用Tab键,可以移动到下一个颜色;而使用Enter键,会将选中颜色的代码插入到当前光标处。

Colorizer插件

利用Colorizer插件可以直观的显示#rgb, #rgba, #rrggbb, #rrgbbaa, rgb(...), rgba(...)等等形式的颜色。如下图所示,颜色代码的背景显示一目了然:

plugin_Colorizer_html

HTML配色

关于HTML和CSS中颜色的命名和代码,您可以参考HTML Color CodesColorSchemer网站。

HTML_Color_Names_Values

从符合标准和可访问性(WCAG)角度考虑,应在CSS中设定色彩,而不是直接设置HTML代码中的color属性。

色彩的平衡感和可读性,对于网页设计至关重要。对于配色方案(Color Schemes),有单色(Monochromatic)、近似色(Analogous)、互补色(Complementary)、补色分割(Split-Complementary)、三等分(Triadic)和矩形配色(Tetratic / Double Complementary)等多种风格。您可以在calcolor网站中寻找灵感。

HTML_Color_Palettes

即使并非专业的设计师,无法创造出令人惊艳的配色,但还是需要以恰当的对比度,来保证网页的可读性。利用tanaguru,可以检查前景和背景色搭配是否合理,并给出相应的优化建议。

HTML_Color_Contrasts

题外话

以下《艺术世界》里关于颜色的文字,读来颇为有趣,也与您分享:

被法国十九世纪著名画家乔治·修拉(Georges Seurat)所大量使用的印度黄(Indian yellow)在今日已不复存在。因为这种源自印度的颜料是由仅喂食芒果树叶和水的母牛的尿液所制成。牛难以消化芒果树叶,它们的尿液在蒸发提炼之后就生成了印度黄这种颜料。但是这种制作方式无疑对动物非常残酷,因而被英国殖民政府所取缔。珍贵的群青色(Ultra Marine)颜料来源于阿富汗采石场的青金石,调制师在研磨过程中需要非常小心地控制,既要把石块磨成细小颗粒,又要保证足够大才能含有颜色。群青色被用于中世纪的画作中,因为其昂贵的价格,常常需要在制作成本里另外加以注明。1826年,人工合成的群青色颜料在一次化学竞赛中被发明出来,被认为是炼金术一样的发明,这个说法毫不夸张,因为天然的群青色真的比黄金还贵。另外一种珍稀的泰尔紫色(Tyrian Purple,或称骨螺紫)则提取自海洋里的某类食肉性海螺分泌出的黏液。因为制作成本高昂,拜占庭帝国把它作为一种社会地位的象征,禁止皇室之外的普通人使用这些颜色,使之成为一种突显高贵身份的“皇家紫色”。--《福布斯颜料收藏库》

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>

星期六, 三月 07, 2020

VIM学习笔记 编译Vim支持Python3 (Compile Vim with Python3 support)

请注意,本文在Mac OS X 10.15.3下测试完成。以下命令中的参数,需要根据您的系统环境进行相应调整。

前置条件

首先确请认已安装Python3或Python2。关于安装和配置信息,请访问Python网站。

使用以下命令,查看当前Python2安装情况:

$ which python

/usr/bin/python

使用以下命令,查看当前Python3安装情况:

$ which python3

/usr/bin/python3

编译Vim

使用Git命令,将Vim源码复制到本地:

$ git clone https://github.com/vim/vim.git

切换到下载的Vim源码目录:

$ cd vim

通过配置命令,启用需要的特性:

$ ./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=dynamic \
--with-ruby-command=/usr/bin/ruby \
--enable-pythoninterp=dynamic \
--with-python-config-dir=/usr/lib/python2.7/config \
--enable-python3interp=dynamic \
--with-python3-config-dir=/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/config-3.7m-darwin \
--enable-cscope \
--enable-gui=auto \
--enable-gtk2-check \
--enable-fontset \
--enable-largefile \
--disable-netbeans \
--with-compiledby="yyq123@email.com" \
--enable-fail-if-missing \
--prefix=/usr/local

其中,“–-enable-fail-if-missing”,用于显示错误信息;“--prefix=/usr/local”,用于指定生成可执行文件的位置。

命令将检查配置项,并输出以下类似信息:

checking --enable-pythoninterp argument... dynamic
checking --with-python-command argument... no
checking for python2... /usr/bin/python2
checking Python version... 2.7
checking Python is 2.3 or better... yep
checking Python's install prefix... /System/Library/Frameworks/Python.framework/Versions/2.7
checking Python's execution prefix... /System/Library/Frameworks/Python.framework/Versions/2.7
checking Python's configuration directory... (cached) /usr/lib/python2.7/config
checking Python's dll name... Python.framework/Versions/2.7/Python
checking if -pthread should be used... no
checking if compile and link flags for Python are sane... yes
checking --enable-python3interp argument... dynamic
checking --with-python3-command argument... no
checking for python3... /usr/bin/python3
checking Python version... 3.7
checking Python is 3.0 or better... yep
checking Python's abiflags... m
checking Python's install prefix... /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7
checking Python's execution prefix... /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7
checking Python's configuration directory... (cached) /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/config-3.7m-darwin
checking Python3's dll name... Python3.framework/Versions/3.7/Python3
checking if -pthread should be used... no
checking if compile and link flags for Python 3 are sane... yes
checking whether we can do without RTLD_GLOBAL for Python... no
checking whether we can do without RTLD_GLOBAL for Python3... yes
checking --enable-tclinterp argument... no
checking --enable-rubyinterp argument... dynamic
checking --with-ruby-command argument... /usr/bin/ruby
checking for /usr/bin/ruby... /usr/bin/ruby
checking Ruby version... OK
checking Ruby rbconfig... RbConfig
checking Ruby header files... /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0
......

执行以下编译命令:

$ sudo make

Starting make in the src directory.
If there are problems, cd to the src directory and run make there
cd src && /Library/Developer/CommandLineTools/usr/bin/make first
/bin/sh install-sh -c -d objects
touch objects/.dirstamp
CC="gcc -Iproto -DHAVE_CONFIG_H   -DMACOS_X -DMACOS_X_DARWIN    " srcdir=. sh ./osdef.sh
......

执行以下安装命令,将编译后的二进制文件复制到 /usr/local/bin :

$ sudo make install

Starting make in the src directory.
If there are problems, cd to the src directory and run make there
cd src && /Library/Developer/CommandLineTools/usr/bin/make install
if test -f /usr/local/bin/vim; then \
   mv -f /usr/local/bin/vim /usr/local/bin/vim.rm; \
   rm -f /usr/local/bin/vim.rm; \
 fi
cp vim /usr/local/bin
strip /usr/local/bin/vim
chmod 755 /usr/local/bin/vim
......

关闭并重新打开Terminal终端,执行以下命令将显示已使用新编译的Vim:

$ which vim

/usr/local/bin/vim

执行以下命令,将显示新编译的Vim已包含Python3特性:

$ vim --version

compile_vim_version

其中,与Python相关的特性主要包括:

  • +python,内置支持Python 2;
  • +python3,内置支持Python 3;
  • +python/dyn,动态支持Python 2;
  • +python3/dyn,动态支持Python 3;

根据以上步骤,我们保持/usr/bin目录下预装的Vim不变,另外在/usr/local/bin目录下安装了自已编译的Vim。

卸载Vim

使用以下命令,可以重置编译操作:

$ sudo make distclean

使用以下命令,可以卸载Vim:

$ sudo make uninstall

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>

星期二, 三月 03, 2020

VIM学习笔记 文本排序(sort)

Vim内置了针对文本进行排序的:sort命令。你可以使用:help :sort命令,查看详细的帮助信息。

请注意,Vim内置的sort命令与Linux系统下的!sort命令并非完全一致。

文本行排序

使用以下命令,可以针对指定行范围内的文本进行排序:

:3,16sort

如下图所示,将第3至16行内的CSS属性进行排序:

sort_range

在可视化模式下选中文本,然后执行以下命令可以对选择的文本进行排序:

:'<,'>sort

使用以下命令,将在排序时去除重复的行。对于重复的多行,将仅仅保留第一行,而其它的行将被删除。

:%sort u

使用以下命令,可以针对所有文本进行倒序排序:

:%sort!

使用以下命令,将按照数字进行排序:

:%sort n

组合以上命令,则可以按照数字倒序排序:

:%sort! n

sort_n

文本块排序

假设我们需要对以下文本进行排序。其中,每个条目是被“.KS”和“.KE”包围的文本块;而其定义的每个术语则是以“.IP”开头的多行文字。

sort_block_troff_file

如果我们希望按术语进行排序,那么可以通过合并行将文本块整合为一个整体,然后进行排序;稍后再重新拆分行,来恢复原有的文本格式。具体步骤如下:

1)将换行符替换为“@@”字符:

:g/^\.KS/,/^\.KE/-1s/$/@@/

.KS@@
.IP "TTY_ARGV" 2n@@
The command, specified as an argument vector,@@
that the TTY subwindow executes.@@
.KE
.KS@@
.IP "ICON_IMAGE" 2n@@
Sets or gets the remote image for icon's image.@@
.KE
.KS@@
.IP "XV_LABEL" 2n@@
Specifies a frame's header or an icon's label.@@
.KE
.KS@@
.IP "SERVER_SYNC" 2n@@
Synchronizes with the server once.@@
Does not set synchronous mode.@@
.KE 

2)以“.KS”和“.KE”作为首尾标记来合并行:

:g/^\.KS/,/^\.KE/j

.KS@@ .IP "TTY_ARGV" 2n@@ The ... vector,@@ ... .@@ .KE
.KS@@ .IP "ICON_IMAGE" 2n@@ Sets or gets ... image.@@ .KE
.KS@@ .IP "XV_LABEL" 2n@@ Specifies a ... an icon's label.@@ .KE
.KS@@ .IP "SERVER_SYNC" 2n@@ Synchronizes with ... mode.@@ .KE 
 

3)对文本排序:

:%sort

.KS@@ .IP "ICON_IMAGE" 2n@@ Sets or gets ... image.@@ .KE
.KS@@ .IP "SERVER_SYNC" 2n@@ Synchronizes with ... mode.@@ .KE 
.KS@@ .IP "TTY_ARGV" 2n@@ The ... vector,@@ ... .@@ .KE
.KS@@ .IP "XV_LABEL" 2n@@ Specifies a ... an icon's label.@@ .KE
 

4)将“@@ ”字符重新替换为换行符,以恢复原有格式:

:%s/@@ /^M/g

.KS
.IP "ICON_IMAGE" 2n
Sets or gets the remote image for icon's image.
.KE
.KS
.IP "SERVER_SYNC" 2n
Synchronizes with the server once.
Does not set synchronous mode.
.KE
.KS
.IP "TTY_ARGV" 2n
The command, specified as an argument vector,
that the TTY subwindow executes.
.KE
.KS
.IP "XV_LABEL" 2n
Specifies a frame's header or an icon's label.
.KE

通过以上全局替换命令和排序命令,对文档中的特定术语进行了排序,而且保持格式不变。请注意:

  • 为了缩短实例文字的长度,我们使用“...”来表示省略的文字;
  • 在第2步使用j命令合并行时,自动新增了一个空格;所以在第3步的替换命令中,需要查找“@@”字符以及紧随其后的一个空格;
  • 第4步命令中的“^M”,是使用Ctrl-VCtrl-M键输入的;如果Ctrl-V键已经被占用,那么可以使用Ctrl-Q键来替代。

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>