我编写了一个Vim插件,用于运行外部命令.我运行的两个命令是diff,grep在"正常"操作期间,每个命令都可以使用非零退出代码退出.
(diff当它找到差异时grep退出退出代码1,当找不到匹配时退出退出代码1.)
出于我的Vimscript的目的,我需要从这些命令返回退出代码0.到目前为止,我正在构建这样的命令:
diff a b || true
Run Code Online (Sandbox Code Playgroud)
和:
grep foo bar || true
Run Code Online (Sandbox Code Playgroud)
这适用于OS X,它显然适用于一些Windows用户.但是,当我通过VirtualBox在OS X上运行Windows 7时,使用Git安装程序安装的Bash,我收到错误消息:
'true'不被识别为内部或外部命令,可操作程序或批处理文件.
在Windows上使用的正确的successful-no-op命令是什么?
当我水平分割窗口时,我想阻止Vim滚动(如果这是正确的词).
假设我在Vim中编辑了10行文件.我在缓冲区有一个窗口,窗口高40行.两个窗户有足够的空间,一个在另一个的顶部,两个都显示整个缓冲区.让我们说scrolloff设置为4.
当我水平分割窗口时,滚动原始窗口,以便scrolloff在窗口顶部和光标所在的行之间显示精确的线条 - 如果scrolloff窗口顶部和光标线之间有多条线 - - 即使没有必要滚动.
换句话说,如果当我分割窗口时光标位于第1,2,3,4或5行,则原始窗口不会"移动"(好).但是如果光标位于第6行,则窗口会滚动,使第2行成为最顶部的可见行...确保scrolloff第(4)行在光标线上方可见(烦人).类似地,如果当我分割窗口时光标在第7行,则原始窗口滚动到该行3成为最顶部的可见行.等等.
有没有办法配置Vim从不在水平分割时滚动原始窗口?
我想可以映射<C-W>s到一个能够满足我想要的功能,但是如果可能的话,我更愿意通过配置来解决这个问题.
假设我正在编辑文件.如果我保存文件,git-diff将给我相对于索引的更改.我想在不保存文件的情况下获得相对于索引的更改 - 对于"实时"差异.
一种解决方案是将未保存的更改写入临时文件(即将文件保存在其他位置),git show :file > tempfile2然后将暂存文件写入另一个临时文件()git-diff tempfile tempfile2.然而,这看起来不够优雅.
有没有更好的办法?
我在HAML中编写了一个简单的自定义过滤器,但我找不到我的Rails应用程序.
过滤器如下所示:
# lib/haml/filters/gfmarkdown.rb
module Haml::Filters::Gfmarkdown
include Haml::Filters::Base
# copied from Haml::Filters::Markdown
lazy_require 'rdiscount', 'peg_markdown', 'maruku', 'bluecloth'
def render(text)
# copied from Haml::Filters::Markdown
engine = case @required
when 'rdiscount'
::RDiscount
when 'peg_markdown'
::PEGMarkdown
when 'maruku'
::Maruku
when 'bluecloth'
::BlueCloth
end
engine.new(gfm text).to_html # gfm method defined elsewhere
end
end
Run Code Online (Sandbox Code Playgroud)
在我看来,我尝试使用这样的过滤器:
:gfmarkdown
#{comment.body}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息: Filter "gfmarkdown" is not defined.
任何想法如何让我的Rails应用程序拿起我的过滤器?
版本:Rails 2.3.4,Haml 2.2.15.
我的模型有一个小数金额属性。
create_table :foos do |t|
t.decimal :amount
end
class Foo < ApplicationRecord
end
Run Code Online (Sandbox Code Playgroud)
我总是希望金额为负数,所以我添加了标准化:
class Foo < ApplicationRecord
normalizes :amount, with: -> amount { - amount.abs }
end
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好。
现在,为了安全起见,我添加了一个验证:
class Foo < ApplicationRecord
normalizes :amount, with: -> amount { - amount.abs }
validates :amount, numericality: {less_than: 0}
end
Run Code Online (Sandbox Code Playgroud)
现在,当我将金额设置为正值时,尽管标准化将其转换为负值,但验证器似乎认为该值仍然是正值并添加了验证错误。
foo = Foo.new amount: 4
foo.amount # => -4
foo.valid? # => false
foo.errors # => #<ActiveModel::Error attribute=amount, type=less_than, options={:value=>4, :count=>0}>
Run Code Online (Sandbox Code Playgroud)
根据测试normalizes,标准化发生在验证之前。
我怎样才能让它发挥作用?